【问题标题】:can't understand this line of code np.mean(pred_i != y_test)看不懂这行代码 np.mean(pred_i != y_test)
【发布时间】:2019-02-01 19:27:48
【问题描述】:
在一个教程中遇到了这行我无法理解的代码:
np.mean(pred_i != y_test)
完成for循环:
error_rate = []
for i in range(1,40):
knn = KNeighborsClassifier(n_neighbors=i)
knn.fit(X_train,y_train)
pred_i = knn.predict(X_test)
error_rate.append(np.mean(pred_i != y_test))
print(np.mean(pred_i != y_test))
【问题讨论】:
标签:
python-3.x
numpy
machine-learning
【解决方案1】:
(pred_i != y_test) 将返回布尔值[True, False, ...] 的向量。
请注意,!= 将为那些与测试值不匹配的对象返回 True,因为您对错误感兴趣。
例如:
np.mean([True, True, False]) 将返回 0.6666666666666666
回到您的问题:您感兴趣的行将返回与测试不匹配的部分结果 - 因此您的错误。
【解决方案2】:
只是为了扩展 Lajos 的答案:
pred_i != y_test
将构造一个新的布尔向量,它是!= 操作的结果。这些由np.mean 自动转换。 True 为 1,False 为 0。然后你得到向量的平均值。 IE。 1.0 表示全部为 True 或 0.0 表示全部为 False。
【解决方案3】:
np.mean(pred_i != y_test) 将平均出 0-1 之间的值,该值将附加到错误率。稍后,如果您绘制错误率与 k 值 (1-40) 的关系图,您将获得具有最小错误率的 k 值。使用该 K 值将提高模型的准确性。