【问题标题】: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 值将提高模型的准确性。

        【讨论】:

          猜你喜欢
          • 2021-08-22
          • 2017-05-16
          • 2013-11-01
          • 1970-01-01
          • 2017-10-13
          • 2023-03-28
          • 1970-01-01
          • 2011-05-10
          • 1970-01-01
          相关资源
          最近更新 更多