预处理已转换为数字的分类数据

我对机器学习还比较陌生,所以不太清楚正确的术语,但我按以下方式将两个分类列转换成了数字。这些列是我的特征输入的一部分,类似于泰坦尼克数据库中的性别列。(它们不是我已经创建的目标数据 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等是没有任何意义的。

缩放你的输入数据是必要的部分:它使数值保持在可比较的范围内(数学影响),让你能够轻松地对损失函数使用单一处理方式。否则,数值范围最大的特征将对训练产生最大的影响,直到你的模型权重学会如何正确地折扣这些大值。

对于你初步的探索,不要进行其他预处理:只需缩放输入数据并开始你的拟合练习。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注