" id="b1img" alt="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" title="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO">
  • " alt="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" title="米课”N+1“思维建站-非官方免费技术支持,Wordpress/Zencart/Opencart建站、SEO" />
  • " alt="Windows/Linux服务器运维技术支持 环境搭建、应用发布、服务器管理、虚拟化、云计算" title="Windows/Linux服务器运维技术支持 环境搭建、应用发布、服务器管理、虚拟化、云计算" />
  • " alt="高校/小型企业网络运维与建设免费技术支持,网络规划、网络优化、故障排除、网络管理" title="高校/小型企业网络运维与建设免费技术支持,网络规划、网络优化、故障排除、网络管理" />

别了网工——我的数据分析之路(六)机器学习入门(案例实战)

资源分享2018-05-20 itlogger阅读(391) 评论(0)
案例实战——《kaggle泰坦尼克号预测》
0.kaggle简介
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。
Kaggle 竞赛了分成几个类别。最常见的类别是:
  • Featured:这些通常是由公司、组织甚至政府赞助的,奖金池最大。
  • Research:这些是研究方向的竞赛,只有很少或没有奖金。它们也有非传统的提交流程。
  • Recruitment:这些是由想要招聘数据科学家的公司赞助的。目前仍然相对少见。
  • Getting Started:这些竞赛的结构和 Featured 竞赛类似,但没有奖金。它们有更简单的数据集、大量教程和滚动的提交窗口让你可以随时输入。
Getting Started 竞赛非常适合初学者,因为它们给你提供了低风险的学习环境,并且还有很多社区创造的教程
1.提出问题
什么样的乘客在泰坦尼克号中更容易存活
2.理解数据
 
Train 包含12个字段,Test包含11个字段,比Train少一个Survivied
Variable
Definition
Key
survival
Survival
0 = No, 1 = Yes
pclass
Ticket class
1 = 1st, 2 = 2nd, 3 = 3rd
sex
Sex
Age
Age in years
sibsp
# of siblings / spouses aboard the Titanic
parch
# of parents / children aboard the Titanic
ticket
Ticket number
fare
Passenger fare
cabin
Cabin number
embarked
Port of Embarkation
C = Cherbourg, Q = Queenstown, S = Southampton
gender_submission(提交结果案例) 包含乘客ID和是否生存
3.数据清洗
3.1缺失值处理
#合并数据集,方便同时对两个数据集进行清洗
full = train.append(test,ignore_index=True)
print (‘合并后的数据集’,full.shape)
#获取数据类型列的描述统计信息
print (full.describe())
#查看每一列的数据类型和数据总数
print (full.info())
#年龄和船票用中位数填充
full[‘Age’] = full[‘Age’].fillna(full[‘Age’].median())
full[‘Fare’] = full[‘Fare’].fillna(full[‘Fare’].median())
#登船港口Embarked,只有两个缺失值,填充为最频繁出现的值S
print (full[‘Embarked’].head())
full[‘Embarked’] = full[‘Embarked’].fillna(‘S’)
#Cabin缺失数据较多,填充为U,代表Unknow
full[‘Cabin确实数据较多’] = full[‘Cabin确实数据较多’].fillna(‘U’)
3.2特征工程
(1)特征工程的主要工作就是对特征的处理,包括数据的采集,数据预处理,特征选择,甚至降维技术等跟特征有关的工作,以供机器学习算法和模型使用。数据和特征决定了机器学习的上限,而模型和算法则是逼近这个上限。因此,特征工程就变得尤为重要了。
(2)特征提取方法:与熟悉业务流程的人员沟通
  • 数值类型数据——直接使用
  • 时间序列数据——转成单独的年、月、日
  • 分类数据——用数值代表类别,超过两个分类可以用one-hot编码
(3)虚拟变量又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的质变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的作用,而且接近现实。
One-Hot编码:为每一组类别生成新的虚拟变量dummy variables,如果变量X表示文化程度,共有{初中,高中,本科}三种取值。那么虚拟变量可以是X_初中,X_高中。而One-Hot为X_初中,X_高中,X_本科。各个新生成变量的取值为{0,1}。
#Sex字段map成0,1
sex_mapDict={‘male’:1,’female’:0}
sex=full[‘Sex’].map(sex_mapDict)
full = pd.concat([full,sex],axis=1)
print (‘######sex####’,sex.head())
#查看Embarked数据内容
print (full[‘Embarked’].head())
#存放提取后的特征
embarkedDf = pd.DataFrame()
#one-hot编码
embarkedDf = pd.get_dummies(full[‘Embarked’],prefix=’Embarked’)
full = pd.concat([full,embarkedDf],axis=1)
#查看编码后的数据
print (embarkedDf.head())
pclassDF = pd.DataFrame()
pclassDF = pd.get_dummies(full[‘Pclass’],prefix=’Pclass’)
full = pd.concat([full,pclassDF],axis=1)
print (pclassDF.head())
#姓名格式:名,头衔,姓,提取头衔
print(full[‘Name’].head())
def getTitle(name):
str1=name.split(‘,’)[1]
str2=str1.split(‘.’)[0]
str3=str2.strIP()
return str3
titleDf = pd.DataFrame()
titleDf[‘Title’] = full[‘Name’].map(getTitle)
titleDf = pd.get_dummies(titleDf[‘Title’])
full = pd.concat([full,titleDf],axis=1)
print (titleDf.head())
#Cabin取第1位字母
print(full[‘Cabin’].head())
cabinDf = pd.DataFrame
full[‘Cabin’] = full[‘Cabin’].map(lambda c:c[0])
cabinDf = pd.get_dummies(full[‘Cabin’],prefix=’Cabin’)
full = pd.concat([full,cabinDf],axis=1)
print (cabinDf.head())
familyDf = pd.DataFrame()
#家庭人数=同代直系亲属数+不同代直系亲属数+自己
familyDf[‘FamilySize’] = full[‘Parch’]+full[‘SibSp’]+1
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 5<=s else 0)
full = pd.concat([full,familyDf],axis=1)
print(familyDf.head())
#相关性矩阵
corrDf = full.corr()
print (‘###############################################’,corrDf)
print (corrDf[‘Survived’].sort_values(ascending=False))
#特征选择:选取和Survivied正负相关比较高的特征
full_X = pd.concat([titleDf,pclassDF,familyDf,full[‘Fare’],cabinDf,embarkedDf,sex,full[‘Age’]],axis=1)
print (full_X.head())
4.建立训练模型(采用逻辑回归)
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.model_selection import train_test_split
train_X,test_X,train_y,test_y = train_test_split(source_X,source_y,test_size=.2,train_size=.8)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(train_X,train_y)
print (model.score(test_X,test_y))
5.方案实施
pred_Y = model.predict(pred_X)
pred_Y = pred_Y.astype(int)
passenger_id=full.loc[sourceRow:,’PassengerId’]
preDf = pd.DataFrame({‘PassengerId’:passenger_id,’Survived’:pred_Y})
print (preDf.shape)
print (preDf.head())
preDf.to_csv(‘e:/titanic_pred.csv’,index=False)
提交kaggle
成绩比较一般,下一步继续改进

转载请注明 :IT樵客
文章地址:http://www.itlogger.com/res/2478.html
标签:,
相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注