首先确定x_all和y_all,x_all经常涉及的问题就是归一化的问题,统一各个features的量纲,这是非常有必要的,
对于数据x_all进行归一化有几种常见的操作,比如我要对某一列进行归一化,就可以这样:
t = pd.DataFrame({
'A': [1, 1, 2, 2, 3],
'B': [4, 5, 5, 6, 6]
})
t.A = MinMaxScaler().fit_transform(t.A.astype('float').values.reshape((-1, 1)))
print t.A
t.A = Binarizer(2).fit_transform(t.A.astype('float').values.reshape((-1, 1)))
print t.A
另外有一个操作就是对X整体进行一个归一化,如这样
import numpy as np
from sklearn import preprocessing
# 定义array
a = np.array([-10, 2.3, 13.7, 56, 108])
print a
# 对array进行归一化(normalization)
# scale进行的操作是按列减去均值, 除以方差, 因此数据的均值为0, 方差为1
print preprocessing.scale(a)
结果是这样的:
[ -10. 2.3 13.7 56. 108. ]
[-1.01951435 -0.73451375 -0.47036685 0.50975718 1.71463777]
上面的两段代码来自这里,博主还给了在svm模型下效果的测试,不得不说对于一些模型而言,进行归一化对模型的提升很有帮助,而在这篇在金融数据集给出的测试则表明,归一化对模型的提升并不是一颗银弹,如在树模型下,归一化的效果就很一般般
而y_all就是打标签,一般是要自己来处理的,对于金融数据的话,最常见的标签就是涨跌,一般是利用这一时刻的收益率来判断的,涉及到的操作就是对dataframe进行列的生成像是这样,对Data中‘ret’这列进行处理,这列代表的含义就是收益率,如果收益率大于0.01就是代表行情利多,否则就是利空,这样就可以了
import numpy as np
import pandas as pd
def function(a):
if a>0.01:
return 1
elif a<0.01:
return -1
else:
return 0
def deal_data(Data):
Data['label'] =Data.apply(lambda x: function(x.ret), axis=1)
此外对于模型数据的预处理是一门很重要的学问,这里还给出了博主找到的几个还不错的csdn博主的教程,希望可以帮到大家:
关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
待续,有对这方面感兴趣的老铁,可以私信聊一下,或者评论区讨论分享