python特征选择SelectKBest实战:期货相关特征
最近写了个代码 。
首先来说一下需求:
我得到了一堆数据 , 这些数据是各种你想到的和想不到的、与豆粕期货相关的和无关的数据 , 比如天气、世界各地牲畜产量等 。
这些数据大概有500多列(也就是500+个特征) , 我要找出与期货相关的特征 , 以便后续使用sklearn相关方法来预测期货价格的趋势 。
这里的“找出与期货相关的特征”就是我们所说的特征工程了 。
是整个数据挖掘过程中最烦人、最头疼 , 却也最重要的一个环节 。
往往你预测的结果正不正确 , 就跟你选取的特征有很大关系 。
同一组数据 , 选择不同的特征 , 或者赋予的权重不同 , 得到的结果有可能就差别巨大 。
这里我选择使用SelectKBest的方法来做 。
这个过程中的前提工作包括了填补缺失值、移除低方差特征 , 这些我在下面代码中都有做到 。
还有个比较绕的技巧 , 就是sklearn的所有方法中 , fit_transform得到的都是numpy的array , 是不带index和columns的 , 而我的要求是要看到选出来的特征 , 要保留index(日期)和columns(特征名 , 比如我想知道天气这个特征是否被保留下来) , 我的解决方法也在我后面相关的代码中 。
好了 , 废话不多说了 , 上代码(录视频真的很浪费时间 , 以后有时间再慢慢把视频补上)
- 引入包
import pandas as pdimport numpy as npfrom sklearn.impute import KNNImputerfrom sklearn.feature_selection import VarianceThresholdimport matplotlib.pyplot as pltfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.model_selection import cross_val_score- 让图表正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']# 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False# 用来正常显示负号- 导入数据
file_path=r"D:\刘\收\每日收盘价Y.csv"data=http://kandian.youth.cn/index/pd.read_csv(file_path)data
文章插图说明原始共有584个特征
- 划分X , y
X=data.iloc[:,2:]X.index=data.iloc[:,0]#原始数据中index为0,1,2这类型的 , 要把index更改为原始数据中日期那一列 , 即第0列y=data.iloc[:,1]y.index=data.iloc[:,0]#同上- 填补缺失值
X=X.fillna(method='bfill',limit=1000)X
文章插图- 删除无法填补的列(一列里缺失值太多 , 填补不了 , 只能删除)
X=X.dropna(axis = 1)print(X.shape)(994,424)说明删掉了160个特征
将处理好缺失值的数据保存
X_=pd.concat((X,y),axis=1)X_.to_csv(r"D:\刘\预测\处理缺失值3.csv")- 移除低方差特征 , 找出最合适的方差
var=np.arange(0.1,1,0.05)X_shape_list=[]for i in var:vt=VarianceThreshold(threshold=i)X_seleted=vt.fit_transform(X)X_shape_list.append(X_seleted.shape[1])print(X_shape_list)plt.plot(var,X_shape_list)plt.xlabel("var")plt.ylabel("X_shape")plt.xticks(np.arange(0.1,1,0.1))plt.show()
文章插图- 取var=0.7 , 移除低方差特征
vt=VarianceThreshold(threshold=0.7)X_seleted=vt.fit(X)X_transformed=vt.fit_transform(X)X_transformed.shape
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 计算机专业大一下学期,该选择学习Java还是Python
- Facebook向客户发邮件:对苹果隐私新规“别无选择”
- 点菜不应该只有扫码一种选择
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 团队奖就奖华为办公宝,跟着李成儒选择准没错
- ARM能否取代x86 小孩子才做选择题
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 华为宣布新消息,老花粉迎来福利,Mate40不是唯一选择
- 2021年Java和Python的应用趋势会有什么变化?
