【机器学习实践】泰坦尼克号乘客获救预测

目录

 

 

目的:

数据读取:

数据处理:

线性回归:


 

目的:

利用所给数据的特征来判断哪些人能够获救。

数据读取:

titanic_train.csv: 训练集,共计891条数据

titanic_test.csv: 测试集,共计418条数据

我们使用pandas库来读取CSV数据。

这里使用read_csv所得到的是  <class 'pandas.core.frame.DataFrame'>  类型的数据,

关于DataFrame 的一些具体操作可以参考pandas的document。《  http://pandas.pydata.org/pandas-docs/stable/ 》

我们可以直接使用print 来输出完整的data_train。

当然也可使用  print(data_train.head(10))  来输出前十条信息。

我们还可以使用info  和  discribe方法来对数据进行一个总览。

首先来看一下discribe方法的输出。

 

我们可以看到关于我们这一组数据的一些统计信息。

下面是info  方法。

从info的输出中我们可以看到,可以看出我们的数据共891行,11列

并且有三个属性是出现了缺失的,分别是Age,Cabin和Embarked,

其中,Age列缺失117条数据;Cabin列缺失687条数据;Embarked列缺失2条数据。

数据处理:

我们从info的结果中得知了信息缺失,我们则有必要针对这部分缺失的信息做出一定的人为处理。

对于不同种类的数据缺失采取不同的方法:

1.   对于Age,因为对结果的预测很重要,采取中位数填充的方法

2.   cabin对结果的影响不大,并且缺失很多,盲目填充会产生一定的副作用,所以采取删除的方法

3.    Embarke 对结果无关,我们这里也是选择删除

综上,我们要做的也就是对于age的填充操作,选定了使用中位数进行填充后,我们具体的实现如下:

data_train["Age"] = data_train['Age'].fillna(data_train['Age'].median())

http://pandas.pydata.org/pandas-docs/stable/reference/frame.html

从pandas 官方的API当中可以找到对于 DataFrame 类型数据的一些对应方法。

fillna方法是属于Missing data handling中的一种。它的作用是Fill NA/NaN values using the specified method.

他的一些具体参数如下:

return 的还是 DataFrame 类型的数据。

这其中的median() 函数的返回值是给定数据的中位数。  the median of the values for the requested axis.

这样一来也就实现了中位数填充的目的。

线性回归:

#线性回归
from sklearn.linear_model import LinearRegression   

#训练集交叉验证,得到平均值
from sklearn.model_selection import KFold
 
#选取简单的可用输入特征
predictors = ["Pclass","Age","SibSp","Parch","Fare"]     
 
#初始化现行回归算法
alg = LinearRegression()

#样本平均分成3份,3折交叉验证
kf = KFold(n_splits=3,shuffle=False,random_state=1) 

# 最终的预测结果(hypothesis)
predictions = []

准备工作完成,开始导入我们准备的数据,

sklearn的相关API当中有关于使用KFold 初始化的kf 的一些相应方法。

我们可以看到在循环当中使用的split就是将输出的dataset 切分为 train 和 test 的函数 

for train,test in kf.split(data_train):
	
    #这里的train_predictors所代表的是选取的特征
	train_predictors = (data_train[predictors].iloc[train,:])
	
	train_label = data_train["Survived"].iloc[train]
	
	alg.fit(train_predictors,train_label)
	
    #  得到hypothesis 
	test_predictions = alg.predict(data_train[predictors].iloc[test,:])

	predictions.append(test_predictions)

循环里的五行代码我们分别来看。

第一行中的iloc函数是用来实现对于行或者列的选取;下面给出了一些实际应用;

逗号是分隔符, 如果不加以说明则默认为整行或者是整列的选取

data_test1=data.iloc[:,:8]  #选取位置为[0,8)列的整列数据
data_test2=data.iloc[0:2,8]  #选取位置为8的列的[0,2)行的数据
data_test3=data.loc[0:2,'工龄']  #选取列名为‘工龄’的[0,2]行的数据

关于alg 也是就线性回归的初始化算法,其所有的方法如下

使用fit 方法就是开始执行线性回归这个分类器了。(这里并没有返回值,我不是很理解)

hypothesis (参数名为test_predictions)的获得方法原理是相同的。

最后将得到的hypothesis 使用list的append方法添加到  predictions  当中去。

因为我们使用的是K = 3 的 3折验证,所以会产生三组预测结果,这三组结果分别存储在三个list当中。

我们将它合并成为一个numpy的ndarray类型数组,然后再进行后续的概率计算。

predictions = np.concatenate(predictions,axis=0)
 
#Map predictions to outcomes(only possible outcomes are 1 and 0)
predictions[predictions>.5] = 1
predictions[predictions<=.5] = 0
accuracy = sum(predictions == data_train["Survived"]) / len(predictions)
print ("准确率为: ", accuracy)

运行后得到我们最终的结果,

猜你喜欢

转载自blog.csdn.net/Pierce_KK/article/details/89852946