机器学习 - sklearn中的classification_report()和KNeighborsClassifier()介绍

本文介绍了如何使用sklearn库中的KNeighborsClassifier进行分类,以及如何利用classification_report计算分类模型的准确率、召回率和F1值。通过实例展示了如何在Iris数据集上应用这些概念并评估模型性能。
摘要由CSDN通过智能技术生成

sklearn.metrics.classification_report 函数可以用于计算分类模型的准确率,召回率和F1值。这些指标对于评估分类模型的性能非常重要。


neighbors.KNeighborsClassifier() 是 Scikit-learn 中的一个类,用于实现基于最近邻算法的分类器。K最近邻 (KNN) 是一种简单而有效的监督学习算法,用于分类和回归任务。KNN分类器基于一个简单的思想:如果一个样本在特征空间中的K个最近邻居中的大多数属于某个类别,那么该样本也属于这个类别。KNN算法中的K是一个用户指定的参数,代表了邻居的数量。neighbors.KNeighborsClassifier() 类实现了K最近邻分类算法。使用这个类可以构建一个KNN分类器,并对数据进行分类预测。以下是一些常用的参数和方法:

  • 参数
    • n_neighbors: 指定要考虑的邻居数量k
    • weights: 指定邻居的权重计算方式,可选值包括’uniform’ (所有邻居权重相等) 和 distance (权重与距离的倒数成比例)
    • algorithm: 指定用于计算最近邻居的算法,可选值包括 ‘auto’ (根据数据自动选择算法), ‘ball_tree’, ‘kd_tree’和’brute’
  • 方法
    • fit(X, y): 用于训练模型,其中X是特征数据,y是对应的标签数据。
    • predict(X): 用于对新数据进行分类预测,其中X是待预测的特征数据。
    • score(X, y): 用于计算模型在给定数据上的准确率,其中X是特征数据,y是对应的真实标签数据。

下面是 classification_report 函数的用法示例:

from sklearn.metrics import classification_report 

# 假设 y_true 是真实标签,y_pred 是模型预测的标签
# classification_report 接受两个参数:y_true 和 y_pred
# y_true 是真实的标签,y_pred 是模型预测的标签
# target_names 参数是一个可选参数,用于指定每个类别的名称
report = classification_report(y_true, y_pred, target_names = target_names)

print(report)

介绍什么是召回率和F1值。

  • 召回率 (Recall)
    • 召回率是指在所有实际为正例的样本中,模型成功预测为正例的样本数量占比。换句话说,召回率衡量了模型对于正例样本的识别能力,即模型有多少能力找出所有的正例。召回率的计算公式为:
      Recall = (TP) / (TP + FN)
      其中,TP表示真正例 (True Positives), 即模型正确预测为正例的样本数量;FN表示假负例 (False Negatives), 即模型将正例错误预测为负例的样本数量。
  • F1值
    • F1值是综合考虑了模型的精确率 (Precision) 和 召回率 (Recall) 的指标。F1值是精确率和召回率的调和平均数,它将两者都考虑在内,因此可以更全面地评估模型地性能。F1值地计算公式为:
      F1 = 2 x (Precision x Recall) / (Precision + Recall)
      其中,Precision表示精确率,即模型预测为正例地样本中,真正为正例地样本数量占比。F1值越高,表示模型地性能越好。

下面是代码例子

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split 
from sklearn import neighbors
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

iris = load_iris()

x = iris.data 
y = iris.target 

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1, shuffle=True, stratify=y)

print("len_x_test: ", len(x_test))
print("len_x_train: ", len(x_train))

model = neighbors.KNeighborsClassifier(n_neighbors=3)

model.fit(x_train, y_train)
prediction = model.predict(x_test)

print(classification_report(y_true = y_test, y_pred = prediction))

结果如下

len_x_test:  45
len_x_train:  105

              precision    recall  f1-score   support

           0       1.00      1.00      1.00        15
           1       0.94      1.00      0.97        15
           2       1.00      0.93      0.97        15

    accuracy                           0.98        45
   macro avg       0.98      0.98      0.98        45
weighted avg       0.98      0.98      0.98        45

都看到这了,点个赞支持一下咯~

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值