首页 > 解决方案 > 在numpy std计算中,np.std(y_test == y_test_predict),比较测试分割和预测结果是什么意思

问题描述

pl看一下使用Python的K Neight分类ML算法

 for i in range (0,Ks):
     neigh = KNeighborsClassifier(n_neighbors = i+1).fit(x_train,y_train)
     y_test_predict = neigh.predict(x_test)
     mean_acc[i] = metrics.accuracy_score(y_test,y_test_predict)
     std_acc[i] = np.std(y_test == y_test_predict)/np.sqrt(y_test_predict.shape[0])

我有 1 个问题(1)这个语句“np.std(y_test == y_test_predict)”的含义是什么。y_test == y_test_predict 操作的输出是什么以及为什么将其作为参数传递给 std() 库

标准差公式背后的逻辑是什么

 std_acc[i] = np.std(y_test == y_test_predict)/np.sqrt(y_test_predict.shape[0])

(2) 为什么标准偏差精度计算如下:

 np.std(y_test == y_test_predict)/np.sqrt(y_test_predict)

标签: pythonnumpymachine-learning

解决方案


让我把它分成两部分。

  1. 两个 numpy 数组的比较返回一个布尔数组。假设y_test = np.array([0, 0, 1])y_test_pred = np.array([0, 1, 1])。然后,y_test == y_test_pred返回array([True, False, True])。基本上,两个数组的元素比较是根据索引进行的。如果你理解了这一点,现在也许你可以看到背后的含义np.std(y_test == y_test_predict):它只是计算比较返回的布尔数组的标准偏差。

  2. 该公式np.std(y_test == y_test_predict)/np.sqrt(y_test_predict.shape[0])基本上采用布尔数组来计算其标准偏差,然后将该标准偏差除以该数组的长度。

如果有任何不清楚的地方,我很乐意提供进一步的说明。


推荐阅读