前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据城堡参赛代码实战篇(六)---使用sklearn进行数据标准化及参数寻优

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

作者头像
石晓文
发布2018-04-11 15:51:20
1.2K0
发布2018-04-11 15:51:20
举报
文章被收录于专栏:小小挖掘机

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

1 上节回顾

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

决策树

代码语言:javascript
复制
from sklearn.tree import DecisionTreeClassifier
dtc=DecisionTreeClassifier()

随机森林

代码语言:javascript
复制
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier()

朴素贝叶斯

代码语言:javascript
复制
from sklearn.naive_bayes import MultinomialNB
mnb=MultinomialNB()

支持向量机

代码语言:javascript
复制
from sklearn.svm import SVC
svc=SVC()

梯度提升决策树

代码语言:javascript
复制
from sklearn.ensemble import GradientBoostingClassifier
gbdt=GradientBoostingClassifier()

2 读入数据

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

代码语言:javascript
复制
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()

结果如下:

代码语言:javascript
复制
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(学生进出图书馆的天数)。

代码语言:javascript
复制
predict = ['order', 'en1','sum', 'time_stamp', 'consumeavg']
train_x=train_x[predict]
text_x=test_x[predict]

3 标准化数据

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

代码语言:javascript
复制
from sklearn.preprocessing import StandardScaler

调用的方法很简单:

代码语言:javascript
复制
ss = StandardScaler()

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

代码语言:javascript
复制
train_x=ss.fit_transform(train_x)

呀,报错了:

代码语言:javascript
复制
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进行标准化处理的,需要一列一列的进行处理,所以,我们采用如下的方式对数据进行正确的标准化:

代码语言:javascript
复制
for c in predict:
    train_x[c] = ss.fit_transform(train_x[c])
    test_x[c] = ss.transform(test_x[c])

4 网格搜索

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

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

代码语言:javascript
复制
from sklearn.grid_search import GridSearchCV

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

代码语言:javascript
复制
parameter={
    'gamma':np.logspace(-2,1,4),
    'C':np.logspace(-1,1,3)
}

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

代码语言:javascript
复制
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表明在训练时将数据集分为五份进行交叉验证。

训练时会有如下输出:

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
print svm_gs.best_params_

输出如下:

代码语言:javascript
复制
{'C': 10.0, 'gamma': 10.0}

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

代码语言:javascript
复制
result = svm_gs.predict(test_x)

5 总结

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

想了解更多? 那就赶紧来关注我们

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 上节回顾
  • 2 读入数据
  • 3 标准化数据
  • 4 网格搜索
  • 5 总结
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档