titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1
print(titanic.loc[:5,'Sex'])
print (titanic["Embarked"].unique())
titanic["Embarked"] = titanic["Embarked"].fillna('S')
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2
去除‘PassengerId’,‘Name’,‘Cabin’,将其余特征值加入
predictors = ['Survived', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked', 'Sex','Pclass']
train_df = titanic[predictors]
print(np.isnan(train_df).any())
train_np = train_df.values
y = train_np[:, 0]
X = train_np[:, 1:]
from sklearn.linear_model import LogisticRegression
import numpy as np
clf = LogisticRegression()
clf.fit(X, y)
数据预处理跟训练集一样,但是与训练集不同的是,测试集的‘Fare’有缺失值,预测时报错,需要补充缺失值
移步:https://blog.csdn.net/weixin_43746433/article/details/92675242
data_test = pd.read_csv('test.csv')
print(data_test.describe())
data_test["Age"] = data_test["Age"].fillna(data_test["Age"].median())
data_test.loc[data_test["Sex"] == "male", "Sex"] = 0
data_test.loc[data_test["Sex"] == "female", "Sex"] = 1
data_test["Embarked"] = data_test["Embarked"].fillna('S')
data_test.loc[data_test["Embarked"] == "S", "Embarked"] = 0
data_test.loc[data_test["Embarked"] == "C", "Embarked"] = 1
data_test.loc[data_test["Embarked"] == "Q", "Embarked"] = 2
test_df = data_test[[ 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked', 'Sex','Pclass']]
print(np.isnan(test_df).any())
data_test["Fare"] = data_test["Fare"].fillna(data_test["Fare"].median())
test_df = data_test[[ 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked', 'Sex','Pclass']]
print(np.isnan(test_df).any())
predicted_np = clf.predict(test_np)
result=pd.DataFrame({'PassengerId':data_test['PassengerId'].values,'Survived':predicted_np.astype(np.int32)})
result.to_csv('predictions.csv', index=False)
预测的结果
我们使用的逻辑回归分类模型是线性分类模型,模型中隐含着一个成本函数,其形式是多远线性方程。模型确定的过程就是要使这个成本函数获得最小值的各个特征(也就是成本函数的自变量)的系数的确定过程。这个方程的系数有什么实际意义呢?如果系数为正,该特征与结果呈正相关,反之,呈负相关,越接近0,相关性越低。如果可以列出特征和其对应的系数,那么我们就可以直观的了解各特征对结果的影响,这也是应用线性模型的好处之一。
coefficients = pd.DataFrame({'columns':list(train_df.columns[1:]),'coef_':list(clf.coef_.T)})
print(coefficients)
在实际训练中,模型通常对训练数据表现好,对非训练数据拟合程度较差,通过将训练集本身随机分成K份,相当于有了多对训练集和测试集,同一个模型可以产生多个准确率,比较多个可能的模型进行交叉验证的结果的准确率方差后,可以比较各个模型的泛化能力。
from sklearn import model_selection
from sklearn import linear_model
clf = linear_model.LogisticRegression()
X = train_df.values[:, 1:]
y = train_df.values[:, 0]
print(model_selection.cross_val_score(clf, X, y, cv=5))
过拟合
通过不断的进行特征工程,产生的特征越来越多,用这些特征去训练模型,会对我们的训练集拟合的越来越好,同时也可能在丧失泛化能力,从而在待预测的数据上,表现不佳,也就是发生过拟合现象。
欠拟合
从另一个角度上说,如果模型在待预测的数据上表现不佳,除掉上面说的过拟合问题,
也有可能是欠拟合,也就是说,即使在训练集上也表现得不那么好。
优化
在机器学习问题上,对于过拟合和欠拟合两种情形,我们优化的方式是不同的。
对于过拟合而言,通常以下策略对结果优化是有用的:
A 做一下特征选择,挑出较好的特征的子集来做训练
B 提供更多的数据,从而弥补原始数据的偏差问题,学习到的模型也会更准确。
而对于欠拟合,我们通常需要更多的特征,更复杂的模型来提高准确度。
著名的学习曲线(learning curve)可以帮助我们判定我们的模型现在所处的状态
我们以样本数据为横坐标,训练和交叉验证集上的错误率为纵坐标的两种状态分别如下:
过拟合(overfitting/high variance):
欠拟合(underfitting/high bias):
def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=1,
train_sizes=np.linspace(.05, 1., 20), verbose=0, plot=True):
画出data在某模型上的learning curve.
----------
estimator : 你用的分类器。
title : 表格的标题。
X : 输入的feature,numpy类型
y : 输入的target vector
ylim : tuple格式的(ymin, ymax), 设定图像中纵坐标的最低点和最高点
cv : 做cross-validation的时候,数据分成的份数,其中一份作为cv集,其余n-1份作为training(默认为3份)
n_jobs : 并行的的任务数(默认1)
train_sizes, train_scores, test_scores = learning_curve(
estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes, verbose=verbose)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
if plot:
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure()
plt.title(title)
if ylim is not None:
plt.ylim(*ylim)
plt.xlabel(u"训练样本数")
plt.ylabel(u"得分")
plt.gca().invert_yaxis()
plt.grid()
plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std,
alpha=0.1, color="b")
plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std,
alpha=0.1, color="r")
plt.plot(train_sizes, train_scores_mean, 'o-', color="b", label=u"训练集上得分")
plt.plot(train_sizes, test_scores_mean, 'o-', color="r", label=u"交叉验证集上得分")
plt.legend(loc="best")
plt.draw()
plt.show()
plt.gca().invert_yaxis()
midpoint = ((train_scores_mean[-1] + train_scores_std[-1]) + (test_scores_mean[-1] - test_scores_std[-1])) / 2
diff = (train_scores_mean[-1] + train_scores_std[-1]) - (test_scores_mean[-1] - test_scores_std[-1])
return midpoint, diff
plot_learning_curve(clf, u"学习曲线", X, y)
目前的曲线看来,我们的model并不处于overfitting的状态(overfitting的表现一般是训练集上得分高,而交叉验证集上要低很多,中间的gap比较大)。因此我们可以再做些feature engineering的工作,添加一些新产出的特征或者组合特征到模型中。
模型融合的含义:当我们手头上有一堆在同一份数据集上训练得到的分类器(比如logistic regression,SVM,KNN,random forest,神经网络),那我们让他们都分别去做判定,然后对结果做投票统计,取票数最多的结果为最后结果。
模型融合可以比较好地缓解,训练过程中产生的过拟合问题,从而对于结果的准确度提升有一定的帮助。
首先,需要训练出多个同时具有可用性的模型。
思路是可以应用多个算法模型,或者是对同一个算法模型用不同的数据集进行训练(bagging)。
本文中用机器学习解决问题的过程大概如下图所示:
参考:https://blog.csdn.net/zs15321583801/article/details/79698341
一 明确课题:在泰坦尼克号之灾事件中,建立乘客获救情况(是/否)与其诸背景特征之间的量化模型,并且依据此模型来预测有某些背景的人在该海难中能否获救。二 课题分析:2.1 选择模型一个二分类问题。常用的分类算法有逻辑回归、随机森林、支持向量机(SVM)等等。我们可以选择其中的一种算法进行模型建立,或是尝试使用多种算法建立模型并融合。对于同一个问题,可以尝试多种思路进行解决,尤其是算法模型...
这是自己做的第一个python关于数据处理的项目,主要过程包括数据预处理、特征提取、特征选择、模型构建与求解,每一部分都经过自己的分析和总结。
第二部分:泰坦尼克号生存率预测
一、实验目的
通过数据堆叠、数据清洗、特征提取、特征选择、构建模型等方法,实现对泰坦尼克号生存人数的预测。
二、实验内容
1、提出问题
2、理解数据
3、数据清洗
4、特征提取
5、特征选择
6、构建模型
7、方案实施
三、实验过程记录
1、提出问题
已给的数据包含训练数据和测试数据,其中训练数据维度为 891 12, 测试数据集维度
经典又兼具备趣味性的Kaggle案例泰坦尼克号问题
kaggle入门——逻辑回归应用之kaggle泰坦尼克之灾 原文连接:https://blog.csdn.net/han_xiaoyang/article/details/49797143#commentBox
https://www.kesci.com/home/project/5bfe39b3954d6e0010681cd1
关于Kag...
目标 : 使用机器学习来创建一个模型,该模型可以预测哪些乘客在泰坦尼克号沉船事故中幸存下来。
import warnings
warnings.filterwarnings("ignore")
我将探索数据并使用它们进行处理,并输入缺失的值。特征工程是机器学习过程中的重要组成部分,因此我想花更多时间在这部分上。我将尝试一些模型,并告诉记录分析哪种模型最适合本次比赛的...
'data':具有原始火车('train.csv')和测试('test.csv')数据
'Titanic.ipynb':此存储库的笔记本
“图像”:来自“ Titanic.ipynb”的所有可视化
'submission.csv':预测的csv文件。
许多乘客未能幸免于泰坦尼克号沉没。 有关这些乘客的数据和信息,请访问 。 下表列出了所提供数据中的变量。
乘客的唯一标识符
0 =否,1 =是
1 = 1、2 = 2、3 = 3
泰坦尼克号上的兄弟姐妹/配偶数
泰坦尼克号上的父母/子女数量
C =瑟堡,Q =皇后镇,S =南安普敦
目的是根据火车和测试数据集(分别称为“