通过一个 kaggle 实例学习解决机器学习问题
本篇文章3566字,读完约9分钟
雷锋。(公开号码:雷锋。com)出版社:杨,本文原作者。这篇文章最初发表在个人博客上。
我以前写过一篇文章“一个框架解决了几乎所有的机器学习问题”,但是没有具体的例子和代码。今天,我在kaggle上看到了一个不错的代码浏览器教程——泰坦尼克号来分析它。源代码可以直接点击这个链接。
在本文中,我们可以学习到一个使用机器学习解决分析问题的完整过程,包括问题解决的一般过程、描述性统计的常用方法、数据清理的常用方法、如何通过给定的公共变量启发性地思考其他影响因素、sklearn建立模型的一般过程以及如何使用流行的集成学习。
让我们言归正传:
在《泰坦尼克号:灾难中的机器学习》中,有必要根据提供的年龄、性别和其他因素的数据来确定哪些乘客更有可能幸存,因此这是一个分类问题。
在解决机器学习问题时,它通常包括以下过程:
数据探索
数据清理
特征工程
模型结构
集成学习
预测
1.数据探索首先导入常用的软件包,如numpy、panasus、matplotlib等。,然后导入训练集和测试集:
importnumpyasnp importpandaaspd importmapplotlib . pylotaplt % mapplotlibinlinetlain = PD . read _ CSV(../input/train.csv)测试= pd.read _ CSV(../input/test.csv),您可以使用以下命令观察数据表的结构:
火车。尾部()测试。头部()火车。描述()接下来,你可以观察各种变量的分布:
测试集和训练集中每个变量的分布几乎相同。
然后看看每个变量对分类标签的影响:
例如,通过可视化,我们可以发现幸存乘客中女性多于男性。
或者是玻璃的影响。
2.数据清理,您可以计算每个变量的缺失值:
train.isnull()。总和()#测试。isnull()。sum()乘客id 0幸存0 p class 0 name 0 sex 0 age 177 sibsp 0 parc 0机票0 fare0客舱687嵌入2 dtype: int 64然后处理丢失的零件。如果是连续变量,可以使用预测模型,如年龄。如果它是一个离散变量,可以找到相似的数据组,然后可以得到最大的总体或最大总体的平均值。
例如,嵌入式,当你可以看到pclass 1和fare 80时,嵌入式= c是最常见的情况。
3.以前有一篇关于如何进行特征工程的文章,只介绍了一些概念。这个例子更有启发性,它告诉我们如何通过给定数量的变量扩展成一个更有影响力的特征,以及如何将新的因素与实际情况联系起来,并将它们转换成数字来表达它们。
下面是数据中的原始变量,看看它们可以关联哪些因素。
pclaspassengerclass(1 = 1st;2=第二;3=第三名)姓名性别年龄同胞人数父母/子女父母/子女上船人数乘客/子女上船人数q =皇后镇;s =南安普敦)
除了性别、年龄等显而易见的因素外,社会地位也可能影响谁会先登上救生艇或被救下来。例如,
像“上尉”、“上校”、“少校”、“博士”、“军官”、“牧师”这样的词可以在名字中找到,以反映乘客在工作场所的位置。
[a-za-z]在船舱里可能反映社会地位。
[0-9]在客舱中可以代表客舱的地理位置。
Sibsp可以计算同一家庭的乘客数量。
标题[title.isin([ capt,col,major,dr,officer,rev])]= officer deck = full[~ full . cabin . is null()]. cabin . map(lambdax:repile(([a-za-z]+))”)。搜索(x)。group())checker = repile(“([0-9]+)”)full[group _ num]= full。炒+满。sibsp+1在此链接中,有必要将类别数据转换为虚拟变量,即转换为矢量格式,其中类别所属的是1,其余的是0。
对连续数据进行归一化,即将宽范围的数据范围缩小到0 ~ 1或-1 ~ 1。
然后去掉不相关的变量。
train=pd.get_dummies(train,columns =[item,pclass,title,group _ size])full[no fare]= PD . series(scaler . fit _ transform(full . fare . resform(-1,1))。整形(-1),索引=满。索引)已满。下降(标签=[乘客id,姓名,客舱,幸存,机票,票价],轴= 1,到位=真)4。建模首先将数据分为训练集和测试集,并使用train \u
Fromsklearn。model _ selection import train _ test _ split x _ train,x _ test,y _ train,y _ test = train _ test _ split (x,y,random _ state = 42)因为以后会用到许多模型,所以您可以编写交叉验证并适合一个函数,这样每次您将
fromsk learn . model _ selection importtgridsearccv fromsk learn . metriccsimportmake _ scorer fromsk learn . metriccsimportocracy _ score score = make _ scorer(accuracy _ score,better _ is _ better = true)def get _ model(估计量,参数,x_train,y_train,得分):model=gridsearchcv(估计量,参数_ grid =参数,得分=得分)模型。fit (x _ train,y _ train)返回模型。best _ estimator _以knn为例,看建立训练和使用模型进行预测的过程。
从sklearn导入分类器模型后,定义一个knn,
定义合适的参数集参数,
然后用get_model训练knn模型,
然后,利用训练好的模型对测试集的数据进行预测,得到准确率。
然后画学习曲线。
fromsk learn . neighbortkneighbortsclassifier knn = kneigbortsclassifier(weights = uniform)参数={ n_neighbors :[3,4,5],p :[1,2]} clf_knn=get_model(knn,parameters,x_train,y_train,计分)打印(accuracy_score(y_test,clf_knn.predict(x_test)))绘图_learning_curve(clf_knn,KNN,x,y,cv = 4);
以上述方式,尝试各种模型并打印出它们的准确度分数:
仅选择几个重要特征后的随机森林,0.816143497758,0.829596412556,0.83080717489,逻辑回归,0.811912825,SVC,0.83822XG Boost,0.83822 XG Boost,0.8382000001集成接下来,将之前训练的几个分类器与voting分类器进行集成,然后进行拟合训练,打印精度分数并绘制学习曲线。
fromsk learn . ensembleimportvoting classifier clf _ VC = voting classifier(估计器=[(XB B1,clf _ xgb1),(lg1,clf_lg1),(svc,clf_svc),(rfc1,clf_rfc1),(rfc2,clf_rfc2),(knn,clf_knn)],投票=硬,权重=[4,1,1,1,1,2]),clf_vc=clf_vc.fit(x_train,y_train)打印(精确度_score)合奏,0.8251121076236。预测使用最终训练的模型来预测给定的测试集文件,并根据指定的格式完成数据,并将其保存在csv中以供提交。
defsubmission(model,fname,x):ans = PD . data frame(columns =[passengerid,Survived])ans . passenger id = passenger id ans . Survived = PD . series(model。雷锋的版权文章未经授权不得转载。详情请参考转载说明。
标题:通过一个 kaggle 实例学习解决机器学习问题
地址:http://www.6st8.com/zbxw/5698.html
免责声明:联合早报中文网从世界各个维度报道世界经济新闻,时政新闻,突发新闻等,本篇的部分内容来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2018@163.com,联合早报中文网的小编将予以删除。