机器学习 - 输入数据的结构

时间:2021-02-05 12:20:21

标签: python pandas neural-network random-forest

我正在尝试使用 Python 进行机器学习来预测未来值。我的数据 (X1, ... , X8, Y) 可以在附图中看到。

Description of my data

为了测试,我开始使用 sklearn RandomForestRegressor,因为我试图预测的值是一个浮点数。我的输入数据最初是混合数据类型(字符串、浮点数、整数和 True/False 语句)。所有这些我都转换为数字。每个字符串代表一个唯一的整数。每个真/假由 1 或 0 表示。

我在网上找到的例子通常是数字(回归量问题?)或字符串(分类器问题?)。

这是混合输入数据类型的正确方法吗?

我很乐意提供任何意见。

'''
X1,X2,X3,X4,X5,X6,X7,X8,Y
93,150,18,10,63,641.1024566,9,0,49.87777112
93,371,19,3,62,641.1024566,1,0,48.85200719
93,150,19,4,62,641.1024566,12,1,41.67165968
93,196,19,6,62,641.1024566,11,1,47.1851408
93,416,19,9,414,641.1024566,5,1,46.67225884
93,196,19,9,375,647.0940683,7,0,43.35530258
93,416,19,10,428,641.1024566,1,1,46.80047933
93,196,19,10,430,641.1024566,6,0,50.19832235
93,196,19,11,579,629.1192331,4,1,46.55482325
93,416,20,2,422,641.1024566,3,1,48.21090473
93,196,20,3,429,641.1024566,10,1,47.95446375
93,150,20,3,429,641.1024566,11,1,48.08268424
93,196,20,4,430,641.1024566,12,1,47.69802277
93,196,20,5,427,641.1024566,11,1,46.99281007
93,196,20,5,424,641.1024566,10,1,47.31336129
93,206,20,6,6,641.1024566,2,1,47.1851408
93,196,20,6,427,491.312163,11,1,35.66926303
93,196,20,9,430,641.1024566,4,1,47.24925105
93,416,20,8,362,641.1024566,8,1,48.08268424
'''


# Normalize input values
predictors = list(set(list(df1.columns))-set(target_column))
maximumPredictor = df1[predictors].max()
df1[predictors] = df1[predictors]/maximumPredictor
df1.describe().transpose()

df2[predictors] = df2[predictors]/maximumPredictor
df2.describe().transpose()

X = df1[predictors].values
y = df1[target_column].values
X_predict = df2[predictors].values


# Split data to evaluate the model with a portion of input data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=40)


# This is the regressor
regressor = RandomForestRegressor(n_estimators=50,
                                  )

# Train regressor
regressor.fit(X_train, y_train.ravel())

# Make a prediction from test data
y_pred = regressor.predict(X_test)

2 个答案:

答案 0 :(得分:0)

如果字符串重复并且您已将字符串 1 编码为 93,将字符串 2 编码为 94,依此类推,您的方法就可以了。否则您无法使用此方法,此资源可能很有用:https://stats.stackexchange.com/questions/339656/mix-of-text-and-numeric-data

答案 1 :(得分:0)

首先

<块引用>

我在网上找到的例子通常是数字(回归量 问题?)或字符串(分类器问题?)。

这与您预测的事物(标签)更相关。如果您从一组有限的可能类别中预测一个类别(可以是一个字符串),那么您就是在谈论分类。如果您要预测一个连续值,其中该值是连续集合中的任何值 - 您在谈论的是回归

在你的情况下,Y 似乎是后一种情况,所以回归。

您的问题重点关注:我可以使用字符串作为输入数据并将其与数字数据结合起来吗?这其实没那么容易。

您已将每个唯一字符串转换为唯一整数,但这会在数据中引入不需要的关系。例如:

  • 字符串 1 = 93
  • 字符串 2 = 94
  • 字符串 3 = 95

这意味着字符串中存在排序。回归算法将尝试使用这种排序,但由于它没有意义,因此无法从中找到有价值的信息。

更好的解决方案是:

  • 如果字符串的不同值的数量有限,则可以选择使用虚拟变量
  • 使用诸如 tf-idf、词袋、...之类的东西在字符串中查找有意义的信息,这样您就可以将不同的字符串相互比较。