python:用 sklearn SVM 构建分类模子,并评价

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

编写 test_sklearn_5.py 如下
  1. # -*- coding: utf-8 -*-
  2. """ 使用 sklearn 估计器构建分类模型,并评价 """
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from sklearn import datasets
  6. from sklearn.svm import SVC
  7. from sklearn.model_selection import train_test_split
  8. from sklearn.preprocessing import StandardScaler
  9. # 1.加载 datasets 中的乳腺癌数据集
  10. cancer = datasets.load_breast_cancer()
  11. #print(len(cancer))
  12. #print(type(cancer))
  13. # 数据集的数据
  14. cancer_data = cancer['data']
  15. #print('breast_cancer_data:','\n', data)
  16. # 数据集的标签
  17. target = cancer['target']
  18. #print('breast_cancer_target:','\n', target)
  19. # 数据集的特征名称
  20. feature_names = cancer['feature_names']
  21. #print('breast_cancer_feature_names:','\n', feature_names)
  22. # 2.将数据集划分为训练集和测试集
  23. # 使用 train_test_split 划分数据集
  24. data_train,data_test,target_train,target_test = \
  25.     train_test_split(cancer_data, target, test_size=0.2, random_state=42)
  26. # 数据标准化
  27. stdScaler = StandardScaler().fit(data_train)
  28. trainStd = stdScaler.transform(data_train)
  29. testStd = stdScaler.transform(data_test)
  30. # 建立 SVM 模型
  31. svm = SVC(C=1.0).fit(trainStd, target_train)
  32. print(" SVM model:\n", svm)
  33. # 预测训练集结果
  34. cancer_target_pred = svm.predict(testStd)
  35. print("前20个结果:\n", cancer_target_pred[:20])
  36. # 将预测结果和真实结果做比对,求出预测对的结果和预测错的结果,并求出准确率
  37. # 求出预测对的结果
  38. dui = np.sum(cancer_target_pred == target_test)
  39. print("预测对的结果数为:", dui)
  40. print("预测错的结果数为:", target_test.shape[0]-dui)
  41. print("预测结果的准确率为:", dui/target_test.shape[0])
  42. # 分类模型常用评价方法
  43. from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,cohen_kappa_score
  44. score = accuracy_score(target_test, cancer_target_pred)
  45. print("用SVM 预测 breast_cancer 数据的准确率:", score)
  46. score = precision_score(target_test, cancer_target_pred)
  47. print("用SVM 预测 breast_cancer 数据的精确率:", score)
  48. score = recall_score(target_test, cancer_target_pred)
  49. print("用SVM 预测 breast_cancer 数据的召回率:", score)
  50. score = f1_score(target_test, cancer_target_pred)
  51. print("用SVM 预测 breast_cancer 数据的F1数值:", score)
  52. score = cohen_kappa_score(target_test, cancer_target_pred)
  53. print("用SVM 预测 breast_cancer 数据的 Cohen's Kappa 系数:", score)
  54. # 分类模型评价报告
  55. from sklearn.metrics import classification_report
  56. print("用SVM 预测 breast_cancer 数据的分类评价报告:\n",\
  57.     classification_report(target_test, cancer_target_pred))
  58. # 绘制 ROC 曲线
  59. from sklearn.metrics import roc_curve
  60. # 求出 ROC 曲线的x轴和y轴
  61. fpr, tpr, threholds = roc_curve(target_test, cancer_target_pred)
  62. plt.figure(figsize=(10,6))
  63. plt.xlim(0,1)
  64. plt.ylim(0.0,1.1)
  65. plt.xlabel('False Postive Rate')
  66. plt.ylabel('True Postive Rate')
  67. plt.plot(fpr,tpr, linewidth=2,linestyle='-',color='red')
  68. plt.show()
复制代码
运行 python test_sklearn_5.py 
  1. (base) D:\python> python test_sklearn_5.py
  2. SVM model:
  3. SVC()
  4. 前20个结果:
  5. [1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0]
  6. 预测对的结果数为: 112
  7. 预测错的结果数为: 2
  8. 预测结果的准确率为: 0.9824561403508771
  9. 用SVM 预测 breast_cancer 数据的准确率: 0.9824561403508771
  10. 用SVM 预测 breast_cancer 数据的精确率: 0.9726027397260274
  11. 用SVM 预测 breast_cancer 数据的召回率: 1.0
  12. 用SVM 预测 breast_cancer 数据的F1数值: 0.9861111111111112
  13. 用SVM 预测 breast_cancer 数据的 Cohen's Kappa 系数: 0.9623140495867769
  14. 用SVM 预测 breast_cancer 数据的分类评价报告:
  15.                precision    recall  f1-score   support
  16.            0       1.00      0.95      0.98        43
  17.            1       0.97      1.00      0.99        71
  18.     accuracy                           0.98       114
  19.    macro avg       0.99      0.98      0.98       114
  20. weighted avg       0.98      0.98      0.98       114
复制代码
参考书:【Python 数据分析与应用】第6章 使用 scikit-learn 构建模子

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表