python - 在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)
解决方案
让我把它分成两部分。
两个 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)
:它只是计算比较返回的布尔数组的标准偏差。该公式
np.std(y_test == y_test_predict)/np.sqrt(y_test_predict.shape[0])
基本上采用布尔数组来计算其标准偏差,然后将该标准偏差除以该数组的长度。
如果有任何不清楚的地方,我很乐意提供进一步的说明。
推荐阅读
- android - Android studio NDK Gradle 构建“源......和目的地......必须不同”
- javascript - 从外部函数 React JS 访问最新状态
- python - Python:对类过滤器的变量应用命令“list”后,该变量变为空
- python - Pyspark 按列分组元素并创建字典
- java - 未收到来自 IGDB 的 Cover 数据
- php - 如何用 TCPDF 写每两页
- angular - 如何以角度动态创建组件以为用户创建文件夹?
- c# - C# 使用类将图像插入数据库
- qt - Qt - QLineEdit 不会发出 textChanged/textEdited 信号,而 QTextEdit 会发出
- zlib - 在 MacOS Catalina 上安装 Kaldi -- zlib 出错