我对机器学习还比较陌生,所以不太清楚正确的术语,但我按以下方式将两个分类列转换成了数字。这些列是我的特征输入的一部分,类似于泰坦尼克数据库中的性别列。(它们不是我已经创建的目标数据 y
)
changed p_changed Date 2010-02-17 0.477182 0 0 2010-02-18 0.395813 0 0 2010-02-19 0.252179 1 1 2010-02-22 0.401321 0 1 2010-02-23 0.519375 1 1
现在我的其他数据 X
看起来是这样的
Open High Low Close Volume Adj Close log_return \Date 2010-02-17 2.07 2.07 1.99 2.03 219700.0 2.03 -0.019513 2010-02-18 2.03 2.03 1.99 2.03 181700.0 2.03 0.000000 2010-02-19 2.03 2.03 2.00 2.02 116400.0 2.02 -0.004938 2010-02-22 2.05 2.05 2.02 2.04 188300.0 2.04 0.009852 2010-02-23 2.05 2.07 2.01 2.05 255400.0 2.05 0.004890 close_open Daily_Change 30_Avg_Vol 20_Avg_Vol 15_Avg_Vol \Date 2010-02-17 0.00 -0.04 0.909517 0.779299 0.668242 2010-02-18 0.00 0.00 0.747470 0.635404 0.543015 2010-02-19 0.00 -0.01 0.508860 0.417706 0.348761 2010-02-22 0.03 -0.01 0.817274 0.666903 0.562414 2010-02-23 0.01 0.00 1.078411 0.879007 0.742730
如你所见,我的其他数据是连续的(包含许多变量),而那两个分类列只有两个值(0和1)。
我原本计划通过这个简单的预处理方法一次性处理所有这些数据
X_scaled = preprocessing.scale(X)
我想知道这样做是否有误?在使用这种简单的预处理之前,是否需要对分类值进行其他处理?
编辑:我尝试了两种方法;首先,我尝试缩放包括转换为1和0的分类数据在内的全部数据。
Full_X = OPK_df.iloc[:-5, 0:-5]Full_X_scaled = preprocessing.scale( Full_X) # 第一种方法,一次性缩放所有数据。
然后,我尝试删除最后两列,进行缩放,然后通过以下代码添加回被删除的列。
X =OPK_df.iloc[:-5, 0:-7] # 这里我删除了-7列,而最初偏移量仅到-5,这意味着额外删除了两列。
我创建了另一个包含那些被删除的两列的数据框
x2 =OPK_df.iloc[:-5, -7:-5] x2 = np.array(x2) # 转换为数组 # 不包含最后两列的数据预处理 from sklearn import preprocessing X_scaled = preprocessing.scale(X)# 然后将X_scaled与x2(最初被删除的列)连接 X =np.concatenate((X_scaled, x2), axis =1) #创建分类器from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=5)knn2 = KNeighborsClassifier(n_neighbors=5)knn.fit(X_scaled, y)knn2.fit(X,y)knn.score(Full_X_scaled, y)0.71396522714526078knn2.score(X, y)0.71789119461581608
因此,当我在标准化过程中确实删除了两列时,分数更高。
回答:
你到目前为止做得相当好。不要缩放你的分类数据。因为那些看起来是二元分类,可以将其视为“是”和“不是”。缩放这些数据有什么意义呢?
更糟糕的是,考虑到你可能有如花卉类型的分类:你将紫茉莉编码为0,玫瑰编码为1,兰花编码为2等。缩放这些数据又意味着什么呢?重新编码这些为紫茉莉=-0.257,玫瑰=+0.448等是没有任何意义的。
缩放你的输入数据是必要的部分:它使数值保持在可比较的范围内(数学影响),让你能够轻松地对损失函数使用单一处理方式。否则,数值范围最大的特征将对训练产生最大的影响,直到你的模型权重学会如何正确地折扣这些大值。
对于你初步的探索,不要进行其他预处理:只需缩放输入数据并开始你的拟合练习。