查看原文
其他

数据城堡参赛代码实战篇(六)---使用sklearn进行数据标准化及参数寻优

文文 Python爱好者社区 2019-04-07

作者:文文

个人公众号:小小挖掘机(ID:wAIsjwj)


前文传送门:

数据城堡参赛代码实战篇(一)---手把手教你使用pandas

数据城堡参赛代码实战篇(二)---使用pandas进行数据去重

数据城堡参赛代码实战篇(三)---我们来探究一个深奥的问题!

数据城堡参赛代码实战篇(四)---使用pandas合并数据表

数据城堡参赛代码实战篇(五)---使用sklearn解决分类问题


关注Python爱好者社区,回复"数据代码",即可获得本文数据代码。


小编们最近参加了数据城堡举办的“大学生助学金精准资助预测”比赛,分组第19名的成绩进入了复赛,很激动有木有!在上一篇文章中,小编介绍了一下我们准备使用的分类算法,包括决策树算法、朴素贝叶斯分类器、随机森林等等。这一节,小编将带你使用参赛中使用到的sklearn中另外两个重要的技术:数据标准化和网格搜索。

1 上节回顾

首先,小编带你一起回顾一下sklearn中各种分类算法的导入及调用:


决策树

from sklearn.tree import DecisionTreeClassifier dtc=DecisionTreeClassifier()

随机森林

from sklearn.ensemble import RandomForestClassifier rfc=RandomForestClassifier()

朴素贝叶斯

from sklearn.naive_bayes import MultinomialNB mnb=MultinomialNB()

支持向量机

from sklearn.svm import SVC svc=SVC()

梯度提升决策树

from sklearn.ensemble import GradientBoostingClassifier gbdt=GradientBoostingClassifier()

2 读入数据

 首先,我们读入合并后的数据,并通过info()方法查看数据的信息:

train_x = pd.read_csv('train_x.csv', index_col=0) train_y = pd.read_csv('train_y.csv', index_col=0, header=None) test_x = pd.read_csv('test.csv', index_col=0) train_ys = np.array(train_y).reshape(-1) print train_x.info()

结果如下:

Int64Index: 15118 entries, 31 to 9048 Data columns (total 36 columns): id              15118 non-null int64 college         15118 non-null int64 order           15118 non-null float64 consume         15118 non-null int64 consumesum      15118 non-null float64 consumeavg      15118 non-null float64 consumemax      15118 non-null float64 remaindersum    15118 non-null float64 remainderavg    15118 non-null float64 remaindermax    15118 non-null float64 en1             15118 non-null float64 sum             15118 non-null float64 time_stamp      15118 non-null float64 dtypes: float64(33), int64(3) memory usage: 4.3 MB

这里需要注意的是,我们需要对我们的特征值进行变换,如果直接读去csv,得到的将是n行1列的数据,如果在sklearn中运行会报错,我们需要首先转换为1行n列的数据,这里使用的是numpy中的reshape方法。


我们可以看到,训练集中有多个特征,为了计算的方便,我们只选取五个特征,分别是order(学生的成绩排名)、consumeavg(平均消费)、en1(恩格尔系数)、sum(学生借阅图书的次数)、time_stamp(学生进出图书馆的天数)。

predict = ['order', 'en1','sum', 'time_stamp', 'consumeavg'] train_x=train_x[predict] text_x=test_x[predict]

3 标准化数据

sklearn中提供了多种标准化数据的方法,小编采用的是StandardScaler,它将数据转换为均值为0,标准差为1的标准正态分布数据。首先我们导入该方法:

from sklearn.preprocessing import StandardScaler

调用的方法很简单:

ss = StandardScaler()

接着就要对数据进行处理,首先我们尝试如下的做法:

train_x=ss.fit_transform(train_x)

呀,报错了:

Traceback (most recent call last):  File "/Users/shixiaowen/PycharmProjects/help/new_help/predict_model.py", line 48, in <module>    train_x[c] = ss.fit_transform(train_x[c]) IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

这个的意思是说,我们是不能将一个多维的DataFrame进行标准化处理的,需要一列一列的进行处理,所以,我们采用如下的方式对数据进行正确的标准化:  

for c in predict:    train_x[c] = ss.fit_transform(train_x[c])    test_x[c] = ss.transform(test_x[c])

4 网格搜索

数据处理之后,我们可以训练我们的模型,比如我们使用支持向量机算法。如果我们想要试一下不同的参数设置对于结果的影响,那么我们就要不断修正模型的参数,或者使用一个循环,不断的调用。哈哈,其实sklearn提供了叫网格搜索的工具,供我们进行参数寻优,下面小编将带你一探究竟。


首先,我们导入网格搜索方法:

from sklearn.grid_search import GridSearchCV

接下来我们需要设置一下我们想要测试的参数以及其对应的值:

parameter={    'gamma':np.logspace(-2,1,4),    'C':np.logspace(-1,1,3) }

这里,我们设置了gamma和C两个参数,使用如下的方法进行网格搜索:

svmc = SVC() svm_gs = GridSearchCV(svmc, parameter, n_jobs=-1, verbose=1,cv=5) svm_gs.fit(train_x, train_ys)

这里,n_jobs设置为-1,表明最大化利用计算资源进行并行计算,cv设置为5表明在训练时将数据集分为五份进行交叉验证。


训练时会有如下输出:

[Parallel(n_jobs=-1)]: Done   1 jobs       | elapsed:   11.1s [Parallel(n_jobs=-1)]: Done  46 out of  60 | elapsed:  1.3min remaining:   23.5s [Parallel(n_jobs=-1)]: Done  60 out of  60 | elapsed:  1.6min finished

可以使用如下的方法查看最优的参数组合:

print svm_gs.best_params_

输出如下:

{'C': 10.0, 'gamma': 10.0}

随后sklearn会使用最优参数组合对模型进行训练。我们利用训练好的模型来预测结果:

result = svm_gs.predict(test_x)

5 总结

本篇,小编带你一同了解了sklearn中数据标准化和利用网格搜索进行参数寻优的过程,并详细介绍了如何从读入数据到得到预测结果的一个完整建模流程,相信大家都有所收获。下一节,小编将带你体验一下一种更加强大的分类方法,敬请期待!

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存