【发布时间】:2018-04-06 16:01:57
【问题描述】:
我有一个带有特征和标签的 numpy 数组。
每个数据点由 10 个二维坐标 (x,y) 和一个指示方向的字符串(“左”或“右”)组成。
例子:
[array([[-19.24181754, -0.6933614 ],
[-17.39631579, -0.84320702],
[-14.57501754, 12.99707368],
[ -8.6202386 , 4.90138246],
[ 0.82478596, 20.01929825],
[ 4.79946667, -10.70312982],
[ 7.10694035, 17.47812632],
[ 11.06254737, 14.17312982],
[ 17.04467368, 0.19169825],
[ 18.94181053, 6.92687018]])
'left']]
标签是 12 个不同的字符串 ('4-4-2', '5-3-2', ...)。我想用这些数据尝试不同的算法来比较它们的性能。第一个算法是决策树分类器。
我看到了两个潜在的问题:
- 以 10 个点为特征的数组
- 分类数据
对于第二点,one-hot-coding 应该可以解决问题。在 numpy 数组中是否有一种非常简单的方法可以做到这一点?
对于第一点,我不确定这是否是一个问题,因为我到目前为止还没有尝试过。
编辑:
我的编码:
#Separate features and labels
X = test[:, [0, 4]]
Y = test[:,10]
zeros = np.zeros((len(X), 2), dtype=int)
X = np.append(X, zeros, axis=1)
for datapoint in X:
if(datapoint[1] == 'left'):
datapoint[2] = 1
else:
datapoint[3] = 1
X = np.delete(X, 1, 1)
#Divide into test and training data: 80% training, 20% test
X_train, X_test, y_train, y_test = train_test_split(X,Y, test_size=0.2, random_state=100)
#Initialize classifier
clf_gini = DecisionTreeClassifier(criterion = "gini", random_state = 100,
max_depth=3, min_samples_leaf=5)
#Train classifier
clf_gini.fit(X_train, y_train)
错误:
"This module will be removed in 0.20.", DeprecationWarning)
Backend TkAgg is interactive backend. Turning interactive mode on.
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1668, in <module>
main()
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1662, in main
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\pydevd.py", line 1072, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/D071947/PycharmProjects/Formation/DecisionTree.py", line 41, in <module>
clf_gini.fit(X_train, y_train)
File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\sklearn\tree\tree.py", line 790, in fit
X_idx_sorted=X_idx_sorted)
File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\sklearn\tree\tree.py", line 116, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\sklearn\utils\validation.py", line 433, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
我猜它与二维坐标数组有关?
【问题讨论】:
-
您可以将 2D 特征的 10 维数组表示为 20 个特征。
标签: python machine-learning decision-tree