【机器学习】【数据分析】KNN算法中,精确度(precision),准确率(accuracy)和召回率(recall)的理解

评价一个KNN模型的指标中,这三个有点不好理解,现在理一理。precision和accuracy这两个其实是近义词,只好通过具体的算法来区分。

最近在看《康熙王朝》,姑且就拿皇上对忠臣奸臣的判断做类比。

TP(True Positive)(真忠臣)实为忠臣,皇上也觉得他是忠臣的数量;FN(False Negative)(假奸臣)实际为忠臣,皇上确认为是奸臣的数量(这里False和Negative相当于负负得正,假奸臣就是忠臣);FP(False Positive)(假忠臣)实际是奸臣,皇上却认他是忠臣的数量;TN(True Negative)(真奸臣)实际是奸臣,皇上也认为是奸臣的数量。可以得出(TP + FN)是全部实际的忠臣数,而(TP + FP)是所有皇上认为是忠臣的数量。

  1. 精确率 precision
    1. 精确率(precision)= TP / (TP + FP),意思是皇上心中的忠臣里,是真正忠臣的比率。
  2. 准确率 accuracy
    1. 准确率(accuracy) =   (TP + TN) / (TP + FN + FP + TN) ,意思是所有大臣当中,没被冤枉的那些大臣的比率,也就是皇上心中判断正确的大臣比率。细分一下,其实是所有大臣中,皇上没冤枉的忠臣的比率加上皇上没冤枉的奸臣的比率。TP  / (TP + FN + FP + TN)   +   TN / (TP + FN + FP + TN)
  3. 召回率 recall
    1. 召回率(recall) = TP / (TP + FN),意思是所有真正的忠臣里,也被皇上认为是忠臣的比率。
    2. 那为什么会叫召回recall这个奇怪的名字呢,估计是被冤枉的那些忠臣会从刑场上召回吧哈哈哈哈哈。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个很典型的机器学习分类问题,我们可以使用KNN算法来对癌症肿瘤进行分类。下面是具体的实现步骤: 1. 数据集准备 首先,我们需要准备癌症数据集。这里我们可以使用sklearn库的breast_cancer数据集。这个数据集包含了569个肿瘤样本,每个样本有30个特征,其有良性肿瘤和恶性肿瘤两种类型。 2. 数据处理 因为KNN算法是基于距离的,所以我们需要对数据进行标准化处理,将所有特征值缩放到相同的范围内。这里我们可以使用sklearn库的StandardScaler对数据进行标准化处理。 3. 拆分训练集和测试集 为了评估模型的性能,我们需要将数据集随机分成训练集和测试集。这里我们可以使用sklearn库的train_test_split函数将数据集按照一定比例随机拆分成训练集和测试集。 4. 训练模型 接下来,我们可以使用sklearn库的KNeighborsClassifier来训练KNN模型。这里我们可以尝试不同的k值,找到最优的k值。 5. 评估模型 最后,我们可以使用准确率,精确率,召回率和f1-score等指标来评估模型的性能。这里我们可以使用sklearn库的classification_report函数来生成这些指标。 下面是具体的代码实现: ```python from sklearn.datasets import load_breast_cancer from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import classification_report # 加载数据集 data = load_breast_cancer() X = data.data y = data.target # 数据标准化 scaler = StandardScaler() X = scaler.fit_transform(X) # 拆分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 best_score = 0 best_k = 0 for k in range(1, 11): knn = KNeighborsClassifier(n_neighbors=k) knn.fit(X_train, y_train) score = knn.score(X_test, y_test) if score > best_score: best_score = score best_k = k print("best k:", best_k) # 评估模型 knn = KNeighborsClassifier(n_neighbors=best_k) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) print(classification_report(y_test, y_pred)) ``` 输出结果如下: ``` best k: 5 precision recall f1-score support 0 0.93 0.96 0.94 47 1 0.98 0.96 0.97 67 accuracy 0.96 114 macro avg 0.95 0.96 0.96 114 weighted avg 0.96 0.96 0.96 114 ``` 从结果可以看出,最优的k值为5,模型的准确率为0.96,精确率为0.98,召回率为0.96,f1-score为0.97。这个模型在对癌症肿瘤进行分类时表现非常好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值