机器学习实例(3)

接上节机器学习实例2
上一节我们对所要处理的数据进行了分类(训练集和测试集),本节的主要目的是特征处理,关于数据集的特征信息我们已经在上一节详细介绍,这次直接进行处理:

from sklearn.feature_extraction import DictVectorizer
dict_vect=DictVectorizer(sparse=False)

以上代码的目的:
sklearn.feature_extraction模块可以用于从由诸如文本和图像的格式组成的数据集中提取机器学习算法支持的格式的特征。
DictVectorizer为分类(也称为标称,离散)特征实现所谓的one-of-K或“one-hot(独热)”编码。 分类特征是“属性值”对,其中值被限制到无序的离散可能性的列表(例如主题标识符,对象的类型,标签,名称…)。

X_train=dict_vect.fit_transform(X_train.to_dict(orient='record'))
dict_vect.feature_names_

以上特征处理代码运行后的输出:

['age',
 'capital-gain',
 'capital-loss',
 'education-num',
 'education= 10th',
 'education= 11th',
 'education= 12th',
 'education= 1st-4th',
 'education= 5th-6th',
 'education= 7th-8th',
 'education= 9th',
 'education= Assoc-acdm',
 'education= Assoc-voc',
 'education= Bachelors',
 'education= Doctorate',
 'education= HS-grad',
 'education= Masters',
 'education= Preschool',
 'education= Prof-school',
 'education= Some-college',
 'hours-per-week',
 'marital-status= Divorced',
 'marital-status= Married-AF-spouse',
 'marital-status= Married-civ-spouse',
 'marital-status= Married-spouse-absent',
 'marital-status= Never-married',
 'marital-status= Separated',
 'marital-status= Widowed',
 'native-country= Cambodia',
 'native-country= Canada',
 'native-country= China',
 'native-country= Columbia',
 'native-country= Cuba',
 'native-country= Dominican-Republic',
 'native-country= Ecuador',
 'native-country= El-Salvador',
 'native-country= England',
 'native-country= France',
 'native-country= Germany',
 'native-country= Greece',
 'native-country= Guatemala',
 'native-country= Haiti',
 'native-country= Holand-Netherlands',
 'native-country= Honduras',
 'native-country= Hong',
 'native-country= Hungary',
 'native-country= India',
 'native-country= Iran',
 'native-country= Ireland',
 'native-country= Italy',
 'native-country= Jamaica',
 'native-country= Japan',
 'native-country= Laos',
 'native-country= Mexico',
 'native-country= Nicaragua',
 'native-country= Outlying-US(Guam-USVI-etc)',
 'native-country= Peru',
 'native-country= Philippines',
 'native-country= Poland',
 'native-country= Portugal',
 'native-country= Puerto-Rico',
 'native-country= Scotland',
 'native-country= South',
 'native-country= Taiwan',
 'native-country= Thailand',
 'native-country= Trinadad&Tobago',
 'native-country= United-States',
 'native-country= Vietnam',
 'native-country= Yugoslavia',
 'occupation= Adm-clerical',
 'occupation= Armed-Forces',
 'occupation= Craft-repair',
 'occupation= Exec-managerial',
 'occupation= Farming-fishing',
 'occupation= Handlers-cleaners',
 'occupation= Machine-op-inspct',
 'occupation= Other-service',
 'occupation= Priv-house-serv',
 'occupation= Prof-specialty',
 'occupation= Protective-serv',
 'occupation= Sales',
 'occupation= Tech-support',
 'occupation= Transport-moving',
 'race= Amer-Indian-Eskimo',
 'race= Asian-Pac-Islander',
 'race= Black',
 'race= Other',
 'race= White',
 'relationship= Husband',
 'relationship= Not-in-family',
 'relationship= Other-relative',
 'relationship= Own-child',
 'relationship= Unmarried',
 'relationship= Wife',
 'sex= Female',
 'sex= Male',
 'workclass= Federal-gov',
 'workclass= Local-gov',
 'workclass= Private',
 'workclass= Self-emp-inc',
 'workclass= Self-emp-not-inc',
 'workclass= State-gov',
 'workclass= Without-pay']

同理我们对测试集的数据也进行处理:

X_test=dict_vect.transform(X_test.to_dict(orient='record'))

这里有个细节要注意:对训练集先用fit_transform然后接着多测试集使用transform函数,目的是将两类数据集按照同一样的标准进行处理;

到此为止,特征处理完毕,在这里我选择随机森林和XGBoost两种集成模型进行模型训练:
随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本 为那一类。

对于非深度学习类型的机器学习分类问题,XGBoost 是最流行的库。由于 XGBoost 可以很好地扩展到大型数据集中,并支持多种语言,它在商业化环境中特别有用。

from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier()
from xgboost import XGBClassifier
xgbc=XGBClassifier()

首先进行交叉测试:
随机选取k-1折的数据进行模型训练。
剩余的一份数据用来验证模型的好坏。
然后,循环中计算的值的平均值即是k-fold交叉验证报告的性能指标。这种方法在计算上可能是昂贵的,但是不会浪费太多的数据(如固定任意测试集的情况)。

from sklearn.cross_validation import cross_val_score
cross_val_score(rfc,X_train,y_train,cv=5).mean()
0.8347554650214203
cross_val_score(xgbc,X_train,y_train,cv=5).mean()
0.8586709654097728

接着进行训练:

#默认随机森林预测
rfc.fit(X_train,y_train)
rfc_y_predict=rfc.predict(X_test)
rfc.score(X_test,y_test)

输出:

0.840737302744994
xgbc.fit(X_train,y_train)
xgbc_y_predict=xgbc.predict(X_test)
xgbc.score(X_test,y_test)

输出:

0.8635459488131547

实际查看:

print(rfc_y_predict[1:20])
print(xgbc_y_predict[1:20])
print(y_test)

从下面打印出的数据可以看到,20个数据有一个是有误的;

[' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K'
 ' >50K' ' <=50K' ' >50K' ' <=50K' ' <=50K' ' >50K' ' >50K' ' <=50K'
 ' <=50K' ' >50K' ' >50K']
[' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K'
 ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' <=50K' ' >50K' ' <=50K'
 ' <=50K' ' <=50K' ' >50K']
32240     <=50K
16568     <=50K
16406     <=50K
13051     <=50K
29453     <=50K
31063     <=50K
6741      <=50K
29557     <=50K
32097     <=50K
19604     <=50K
30108     <=50K
20128     <=50K
13205     <=50K
2493      <=50K
1193      <=50K
31161      >50K
10252     <=50K
20591     <=50K
8290       >50K
25915      >50K
26877     <=50K
24098     <=50K
16900     <=50K
19801     <=50K
25334     <=50K
25366     <=50K
12910     <=50K
4579      <=50K
18281     <=50K
27193     <=50K

定量来看:

from sklearn.metrics import classification_report
print('随机森林的预测准确率:')
print(classification_report(y_test,rfc_y_predict,target_names=['result']))
print('XGBoost的预测准确率:')
print(classification_report(y_test,xgbc_y_predict,target_names=['result']))

输出:

随机森林的预测准确率:
             precision    recall  f1-score   support

     result       0.87      0.92      0.90      5613

avg / total       0.83      0.84      0.84      7541

XGBoost的预测准确率:
             precision    recall  f1-score   support

     result       0.87      0.95      0.91      5613

avg / total       0.86      0.86      0.86      7541

如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
CSDN是一个知名的IT技术社区,提供了大量关于机器学习实例和教程。在CSDN上,有很多作者和开发者分享了他们在机器学习领域的实践经验和项目实例。 首先,CSDN提供了许多基于机器学习的项目实例。这些项目来自不同领域,如自然语言处理、图像识别、推荐系统等。通过这些实例,读者可以了解到如何将机器学习算法应用于实际问题,并学习到项目开发的相关技巧和经验。例如,有一篇实例教程介绍了如何使用深度学习算法实现语音识别,另一篇教程则讲解了如何利用机器学习算法构建一个电影推荐系统。 其次,CSDN上的作者还会分享他们在机器学习领域的研究成果和应用案例。这些文章通常会介绍他们在解决实际问题时所采用的机器学习方法和步骤,以及实验结果和分析。通过阅读这些文章,读者可以了解到当前机器学习研究的最新进展和趋势,并从中获得启发和灵感。 最后,CSDN还提供了一个活跃的机器学习社区,读者可以在这里与其他机器学习爱好者进行交流和讨论。在这个社区里,人们可以分享自己的学习体验和困惑,向其他人请教问题,并获得专业人士的回答和指导。这个社区为机器学习初学者提供了一个学习和进步的平台,同时也为资深的机器学习专家提供了一个交流和合作的机会。 总结来说,CSDN作为一个知名的IT技术社区,为读者提供了丰富的机器学习实例和教程。通过阅读这些实例和教程,读者可以学习到机器学习的基本原理和应用方法,并了解到当前机器学习领域的最新进展。同时,CSDN的机器学习社区也为读者提供了一个与他人交流和讨论的平台,促进学习和成长。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值