机器学习

导入处理数据包

import pandas as pd
import numpy as np

训练数据集

train=pd.read_csv(r”E:\taitnik\train.csv”)
test=pd.read_csv(r”E:\taitnik\test.csv”)

查看数据集特征

print(“训练数据集:”,train.shape,”,测试数据集:”, test.shape)

合并数据集,方便同时对两个数据集进行清洗

full=train.append(test,ignore_index=True)
print(“合并后的数据集:”,full.shape)

获取数据类型的描述性统计信息

full.describe()
合并后的数据集: (1309, 12)

查看每一列的数据类型和数据总数

full.info()

由于缺失值太多,会影响建模,因此需要对缺失值进行数据填充

年龄

full[“Age”]=full[“Age”].fillna(full[“Age”].mean())

船票价格

full[“Fare”]=full[“Fare”].fillna(full[“Fare”].mean())

查看登录港口数据形式

full[“Embarked”].head()
0 S
1 C
2 S
3 S
4 S
Name: Embarked, dtype: object

将登录港口(embarked)填充为S

full[“Embarked”]=full[“Embarked”].fillna(“S”)

查看船舱号数据形式

full[“Cabin”].head()
Name: Cabin, dtype: object

由于船舱号缺失较多,将缺失值定义为U,表示unknown

full[“Cabin”]=full[“Cabin”].fillna(“U”)
“”“将性别的值映射为数值,男(male)对应数字1,女(female)对应数字2”“”
sex_mapDict={‘male’:1, ‘female’:0}
full[‘Sex’]=full[‘Sex’].map(sex_mapDict)
full[‘Sex’].head()
Name: Sex, dtype: int64

Embarked 存放提取后的特征

embarkedDf=pd.DataFrame()

使用get_dummies进行one-hot编码,列名前缀是Embarked

embarkedDf=pd.get_dummies(full[‘Embarked’],prefix=’Embarked’)
embarkedDf.head()

船舱等级 存放提取后的特征

pclassDf=pd.DataFrame()

使用get_dummies进行one-hot编码,列名前缀是Pclass

pclassDf=pd.get_dummies(full[‘Pclass’],prefix=’Pclass’)
pclassDf.head()
full[‘Name’].head()
0 Braund, Mr. Owen Harris
1 Cumings, Mrs. John Bradley (Florence Briggs Th…
2 Heikkinen, Miss. Laina
3 Futrelle, Mrs. Jacques Heath (Lily May Peel)
4 Allen, Mr. William Henry
Name: Name, dtype: object
“”“定义函数,从Name中获取头衔”“”
def getTitle(name):
#examples, get Mr. Owen Harris
str1=name.split(‘,’)[1]
#examples, get Mr
str2=str1.split(‘.’)[0]
#strip()方法用于移除字符串头尾指定的字符(默认为空格)
str3=str2.strip()
return str3

存放提取的特征(头衔)

titleDf=pd.DataFrame()

map函数:对Series每个数据应用自定义的函数计算

titleDf[‘Title’]=full[‘Name’].map(getTitle)
titleDf.head()

姓名中头衔字符串对应的头衔类别(映射关系)

title_mapDict={
“Capt”:”Officer”,
“Col”:”Officer”,
“Major”:”Officer”,
“Jonkheer”:”Royalty”,
“Don”:”Royalty”,
“Sir”:”Royalty”,
“Dr”:”Officer”,
“Rev”:”Officer”,
“the Countess”:”Royalty”,
“Dona”:”Royalty”,
“Mme”:”Mrs”,
“Mlle”:”Miss”,
“Ms”:”Mrs”,
“Mr”:”Mr”,
“Mrs”:”Mrs”,
“Miss”:”Miss”,
“Master”:”Master”,
“Lady”:”Royalty”
}

map函数:对Series中每个数据应用自定义的函数计算

titleDf[‘Title’]=titleDf[‘Title’].map(title_mapDict)

使用get_dummies进行one-hot编码

titleDf=pd.get_dummies(titleDf[‘Title’])
titleDf.head()

查看Cabin的内容

full[‘Cabin’].head()
0 U
1 C85
2 U
3 C123
4 U
Name: Cabin, dtype: object

存放客舱号信息

”’注意,此处使用了lambda函数(匿名函数),将字符串c只取第一个元素,因此C10和C11都属于C,即都属于C客舱”’
cabinDf=pd.DataFrame()
full[‘Cabin’]=full[‘Cabin’].map(lambda c:c[0])

使用get_dummies进行one-hot编码,列名前缀是Cabin

cabinDf=pd.get_dummies(full[‘Cabin’], prefix=’Cabin’)
cabinDf.head()

存放家庭信息

familyDf=pd.DataFrame()
”’家庭人数=Parch(同代直系亲属)+SibSp(不同代直系亲属数)+1(乘客自己)”’
familyDf[‘FamilySize’]=full[‘Parch’]+full[‘SibSp’]+1

”’每个人的家庭人数差异非常大,因此作为分类数据需要缩减其分类类别。将家庭人数分为小家庭(Family_Single=1),中等家庭(Family_Small, >=2 and <=4), 大家庭Family_Large, >=5”’

if条件为真的时候返回if前面的内容,否则返回0

familyDf[‘Family_Single’]=familyDf[‘FamilySize’].map(lambda s: 1 if s==1 else 0)
familyDf[‘Family_Small’]=familyDf[‘FamilySize’].map(lambda s: 1 if 2<=s<=4 else 0)
familyDf[‘Family_Large’]=familyDf[‘FamilySize’].map(lambda s: 1 if s>=5 else 0)
familyDf.head()

相关性矩阵

corrDf=full.corr()
corrDf
”’查看各个特征与生成情况(Survived)的相关系数,ascending=False表示按降序排列”’
corrDf[‘Survived’].sort_values(ascending=False)
Survived 1.000000
Fare 0.257307
Parch 0.081629
PassengerId -0.005007
SibSp -0.035322
Age -0.070323
Pclass -0.338481
Sex -0.543351
Name: Survived, dtype: float64

特征选择

full_X=pd.concat([titleDf,
pclassDf,
familyDf,
full[‘Fare’],
cabinDf,
embarkedDf,
full[‘Sex’]
],axis=1)
full_X.head()

原始数据集有891行

sourceRow=891

原始数据集:特征

source_X=full_X.loc[0:sourceRow-1,:]

原始数据集:标签

source_y=full.loc[0:sourceRow-1,’Survived’]

预测数据集:特征

pred_X=full_X.loc[sourceRow:,:]
from sklearn.cross_validation import train_test_split

建立模型用的训练数据集和测试数据集

train_X,test_X,train_y,test_y=train_test_split(source_X,
source_y,
train_size=.8)

输出数据集大小

print(‘原始数据集特征:’,source_X.shape,
‘训练数据集特征:’,train_X.shape,
‘测试数据集特征:’,test_X.shape)
print(‘原始数据集特征:’,source_y.shape,
‘训练数据集特征:’,train_y.shape,
‘测试数据集特征:’,test_y.shape)
原始数据集特征: (891, 27) 训练数据集特征: (712, 27) 测试数据集特征: (179, 27)
原始数据集特征: (891,) 训练数据集特征: (712,) 测试数据集特征: (179,)

训练模型

第一步:导入算法

from sklearn.linear_model import LogisticRegression

第二步:创建模型:逻辑回归

model=LogisticRegression()

第三部:训练模型

model.fit(train_X,train_y)

分类问题,score得到模型的正确率

model.score(test_X,test_y)
0.8268156424581006

使用机器学习模型,对预测数据集中的生存情况进行预测

pred_Y=model.predict(pred_X)
”’生成的预测值为浮点数比如0.0, 1.0,kaggle提交要求的是整型比如0,1,因此需要对数据类型进行转换”’
pred_Y=pred_Y.astype(int)

乘客ID

passenger_id=full.loc[sourceRow:,’PassengerId’]

数据框:乘客ID and 预测生存情况的值

predDf=pd.DataFrame(
{‘PassengerId’: passenger_id,
‘Survived’: pred_Y
})
predDf.shape
predDf.head()

保存结果

predDf.to_csv(“E:/taitnik/titanic_pred.csv”, index=False)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值