学习机器学习的python案例——训练身高数据的机器学习模型(本文只写决策树部分),遇到了如题报错,代码是按照书上写的,如下:
import numpy as np
from sklearn import tree
x_train = [175, 178, 180, 181, 190, 153, 155, 162, 163, 158] # 创建训练集
x_train = np.reshape(x_train, (-1, 1)) # 将训练集排成1列
y_train = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] # 创建目标集,给身高数据打标签
# 训练决策树分类器
clf_tree = tree.DecisionTreeClassifier()
clf_tree.fit(x_train, y_train)
# 预测160和179的标签,正确应为160为1,179为0
print('身高160的类别为:', clf_tree.predict(160))
print('身高179的类别为:', clf_tree.predict(179))
1.报错是值错误:需要一个二维数组,而不是一个数字。既predict()需要二维数组作为输入。
2.经过调试后发现,出错位置在print中,既predict(160),按照如下提示:
ValueError: Expected 2D array, got scalar array instead:
array=160.0.
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
将160和179重塑为二维数组形式,重塑后代码如下:
import numpy as np
from sklearn import tree
x_train = [175, 178, 180, 181, 190, 153, 155, 162, 163, 158] # 创建训练集
x_train = np.reshape(x_train, (-1, 1)) # 将训练集排成1列
y_train = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] # 创建目标集,给身高数据打标签
# 训练决策树分类器
clf_tree = tree.DecisionTreeClassifier()
clf_tree.fit(x_train, y_train)
# 预测160和179的标签,正确应为160为1,179为0
lh_pre = [160]
hh_pre = [179]
lh_pre = np.reshape(lh_pre, (1, -1)) # 重构数组,本例中(-1, 1)也可以
hh_pre = np.reshape(hh_pre, (1, -1)) #
print('身高160的类别为:', clf_tree.predict(lh_pre))
print('身高179的类别为:', clf_tree.predict(hh_pre))
结果如下:
身高160的类别为: [1]
身高179的类别为: [0]