ValueError: Expected 2D array, got scalar array instead:array=160.0.

学习机器学习的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]

你可能感兴趣的:(python,机器学习,决策树)