目录
目的:
利用所给数据的特征来判断哪些人能够获救。
数据读取:
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)
运行后得到我们最终的结果,