机器学习之乳腺癌问题(SVM)

机器学习之乳腺癌问题SVM

  • 题目所需的代码及数据
  • 利用SVM建模
  • SVM调参

题目所需的代码及数据

链接:https://pan.baidu.com/s/1bS7Ku_PUfcimiVkmLz9Fzw
提取码:0929

利用SVM建模


import matplotlib.pyplot as plt
import pandas as pd
import numpy as npfrom sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.feature_selection import SelectKBest, f_regression #特征选择
import seaborn as sns
#更改一下画图的要求
plt.style.use('fivethirtyeight')
sns.set_style("white")
plt.rcParams['figure.figsize'] = (8,4)data = pd.read_csv('data/data.csv')print("数据预处理:")
# 划分一下特征和标签
X = data.iloc[:,2:32] # 特征
y = data.iloc[:,1] # 标签
# 将类标签从其原始字符串表示(M和B)转换为整数
le = LabelEncoder()
y = le.fit_transform(y)
print(y)# 标准化数据(以0为中心并缩放以消除差异)。
scaler =StandardScaler()
Xs = scaler.fit_transform(X)print("交叉验证:(交叉验证训练集:测试集 = 7:3)")
# 5.划分测试集和训练集
#stratify是为了保持split前类的分布
#将stratify=X就是按照X中的比例分配
#将stratify=y就是按照y中的比例分配
X_train, X_test, y_train, y_test = train_test_split(Xs, y, stratify=y,#Xs是特征 y是标签test_size=0.3,random_state=33)# 6. 创建一个SVM分类器,并在70%的数据集上对其进行训练。
clf = SVC(probability=True)
clf.fit(X_train, y_train)#7. 对30%的持力测试样本的预测精度进行分析。
classifier_score = clf.score(X_test, y_test)*100
print ('分类器准确度得分 {:03.2f}% \n'.format(classifier_score))print("使用SVC估计器获得5倍交叉验证分数的平均值")
n_folds = 5
cv_error = np.average(cross_val_score(SVC(), Xs, y, cv=n_folds)) * 100
print('当n_folds={}-此分类器的交叉验证精度分数为 {:.2f} % \n'.format(n_folds, cv_error))#特征选择#clf2 = make_pipeline(SelectKBest(f_regression, k=3),
#                     SVC(probability=True))
# 使用SVC估计器获得3倍交叉验证分数的平均值。
print("使用SVC估计器获得3倍交叉验证分数的平均值")
n_folds = 3
cv_error = np.average(cross_val_score(SVC(), Xs, y, cv=n_folds)) * 100
print('当n_folds={}-此分类器的交叉验证精度分数为 {:.2f} %\n'.format(n_folds, cv_error))def ROC_plot(y, yproba):from sklearn.metrics import roc_curve, aucplt.figure(figsize=(9,6))fpr, tpr, thresholds = roc_curve(y_test, probas_[:, 1])roc_auc = auc(fpr, tpr)plt.plot(fpr, tpr, lw=2, label='ROC fold (area = %0.2f)' % (roc_auc))plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6), label='Random')plt.xlim([-0.05, 1.05])plt.ylim([-0.05, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver operating characteristic example')plt.show()plt.axes().set_aspect(1)#进行预测   预测概率
probas_ = clf.predict_proba(X_test)
#画图
ROC_plot(y, probas_[:1])

在这里插入图片描述
在这里插入图片描述

SVM调参


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormapfrom sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.svm import SVCfrom sklearn import metrics, preprocessing
from sklearn.metrics import classification_reportdata = pd.read_csv('data/data.csv')print("数据预处理:")
# 划分一下特征和标签
X = data.iloc[:,2:32] # 特征
y = data.iloc[:,1] # 标签
# 将类标签从其原始字符串表示(M和B)转换为整数
le = LabelEncoder()
y = le.fit_transform(y)
print(y)# 标准化数据(以0为中心并缩放以消除差异)。
scaler =StandardScaler()
Xs = scaler.fit_transform(X)print("交叉验证:(交叉验证训练集:测试集 = 7:3)")
# 5.划分测试集和训练集
#stratify是为了保持split前类的分布
#将stratify=X就是按照X中的比例分配
#将stratify=y就是按照y中的比例分配
X_train, X_test, y_train, y_test = train_test_split(Xs, y, stratify=y,#Xs是特征 y是标签test_size=0.3,random_state=33)
# 6. 创建一个SVM分类器,并在70%的数据集上对其进行训练。
clf = SVC(probability=True)
clf.fit(X_train, y_train)
y_pred = clf.fit(X_train, y_train).predict(X_test)#sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。
#主要参数:
# 精度 记得  f1成绩  支持数
#目标值。
#分类器返回的估计值。
#精确
#宏平均值
#加权平均
print(classification_report(y_test, y_pred ))## 绘图混淆矩阵
cm = metrics.confusion_matrix(y_test, y_pred)
fig, ax = plt.subplots(figsize=(5, 5))
ax.matshow(cm, cmap=plt.cm.Reds, alpha=0.3)
for i in range(cm.shape[0]):for j in range(cm.shape[1]):ax.text(x=j, y=i,s=cm[i, j],va='center', ha='center')
plt.xlabel('Predicted Values')
plt.ylabel('Actual Values')
plt.show()def decision_plot(X_train, y_train, n_neighbors, weights):h = .02  # step size in the meshXtrain = X_train[:, :2] #我们只采用前两个特性。#================================================================
#创建颜色贴图
#================================================================
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])#================================================================
#我们创建了一个SVM实例并拟合数据。
#我们不缩放数据,因为我们想要绘制支持向量
#================================================================C = 1.0  # SVM regularization parametersvm = SVC(kernel='linear', random_state=0, gamma=0.1, C=C).fit(Xtrain, y_train)
rbf_svc = SVC(kernel='rbf', gamma=0.7, C=C).fit(Xtrain, y_train)
poly_svc = SVC(kernel='poly', degree=3, C=C).fit(Xtrain, y_train)#% matplotlib inline
plt.rcParams['figure.figsize'] = (10, 6)
plt.rcParams['axes.titlesize'] = 'large'# create a mesh to plot in
x_min, x_max = Xtrain[:, 0].min() - 1, Xtrain[:, 0].max() + 1
y_min, y_max = Xtrain[:, 1].min() - 1, Xtrain[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),np.arange(y_min, y_max, 0.1))# title for the plots
titles = ['SVC with linear kernel',#线性核函数'SVC with RBF kernel',#高斯核函数'SVC with polynomial (degree 3) kernel']#三次多项式核函数for i, clf in enumerate((svm, rbf_svc, poly_svc)):# Plot the decision boundary. For that, we will assign a color to each# point in the mesh [x_min, x_max]x[y_min, y_max].plt.subplot(2, 2, i + 1)plt.subplots_adjust(wspace=0.4, hspace=0.4)Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])# Put the result into a color plotZ = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)# Plot also the training pointsplt.scatter(Xtrain[:, 0], Xtrain[:, 1], c=y_train, cmap=plt.cm.coolwarm)plt.xlabel('radius_mean')plt.ylabel('texture_mean')plt.xlim(xx.min(), xx.max())plt.ylim(yy.min(), yy.max())plt.xticks(())plt.yticks(())plt.title(titles[i])plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将日志记录到 Windows事件日志 中

每当出现一些未捕获异常时,操作系统都会将异常信息写入到 Windows 事件日志 中,可以通过 Windows 事件查看器 查看,如下图:这篇文章将会讨论如何使用编程的方式将日志记录到 Windows 事件日志 中。安装 EventLog 要想在 .NET Core…

【Java】springboot

文章目录 Spingboot1、起步依赖2、构建springboot工程jar包3、springboot配置文件4、多环境配置5、maven和boot多环境兼容问题6、配置文件分类7、springboot整合mybatis Spingboot springboot用来简化spring的初始搭建以及开发过程。 比方说,创建一个springmvc程序…

数据科学与python语言——Matplotlib数据可视化基础

Matplotlib数据可视化基础一.读取数据与数据处理阶段1.提取指定行中的数据2.得到>指定数值的数据3.得到指定值得数据4.整体的数据处理:二.画图函数1.plt.subplots()2.plt.subplots_adjust()3.设置x轴y轴的刻度和标签4.使用中文标题在作图时三.画折线图(plot)四.画…

2021年,Azure云遇到. NET5,注定开启高光时刻,微软的心,真大!

云开发诞生的市场背景云开发是一个已经存在了很多年的概念,但在过去未能真正成为主流。然而,由于云和软件即服务的宏观趋势的结合,以及技术的进步,如容器技术 Docker 和 Kubernetes,云开发现在有机会最终成为基于云的应…

.net5+nacos+ocelot 配置中心和服务发现实现

相关文章:手动造轮子——为Ocelot集成Nacos注册中心出处:https://www.cnblogs.com/buruainiaaaa/p/14121176.html作者:唐 最近一段时间 因公司业务需要,需要使用.net5做一套微服务的接口,使用nacos 做注册中心和配置中…

数据科学与python语言——Pandas统计分析基础(时间转换+聚合)

Pandas统计分析基础(时间转换聚合)实验要求一实验二要求全部代码实验要求一 #M表的时间戳类型转为datetime data_Mete[TIMESTAMP]pd.to_datetime(data_Mete[TIMESTAMP],format%Y%m%d%H%M%S)data_VI[Date]pd.to_datetime(data_VI[Date],format%Y/%m/%d) p…

容器的那点事

当我们的后端服务器不够用的时候,我们可以通过容器技术,可以快速的把这些服务器全部虚拟出来, 当然这个虚拟跟虚拟机是不一样的,比虚拟机的方式快多了,早期阿里的淘宝平台如果整个坏掉了,重新搭建部署起来需…

lqb——修改数组

思路 **常规思路用哈希表的思想,设置bool数组标识是否被占用过,但是发生矛盾时将会造成查找需要遍历整个数组,比如,1,2,3……100000已连续占用,此时再插入1,将会一直遍历这100000个数,极端情况下,插入100000个1,将是n平方的复杂度。 如何快速查找到插入位置,这就引…

bp神经网络训练_数据分析模型6——神经网络基础(人工智能的底层模型)

未经许可请勿转载更多数据分析内容参看这里今天我们来学习人工智能的底层模型——神经网络(NEURAL NETWORKS),现在比较热门的一个模型是深度学习,深度学习的基础也是神经网络,要学好深度学习,神经网络不了解…

四种最令人讨厌的编程语言:Java、Javascript、C++和Perl

喜欢就关注我们吧!TIOBE 12 月榜单已于日前公布,在最新的排行榜中,C 语言仍高居榜首,其次分别是 Java、Python 和 C。在编程语言这一领域中,许多编程语言都会随着时间的推移而经历人气的激增,以及历史迭代之…

微软用的工具,统一财务三大表及高级分析通用模板

虽然罗叔并非财务专业,但大概了解一些财务常识。例如财务报表的三大报表以及一些常见分析等。本月《BI真经》视频课程即将就绪,后续罗叔将和大家开展更多的业务研究。我们知道,PowerBI 在绘制某些报告时候很难,初学者根本无法实现…

文件 单片机_如何查看你写的单片机程序有多大?

单片机我们都用过,我们知道单片机的FLASH有4K的,有8K的,单片机程序我们也写过,但是我们写好的程序有多大,你知道吗?程序写好并编译后生成hex文件,这个hex文件就是要下载到单片机里的文件&#x…

css less 不要作用到子对象_使用Less实现网站主题切换

v-easy-components change theme很多初学前端的开发同学一定有一种想法,就是如何更改网站的主题。前年(2018),我也陷入了思考,如何切换网站主题呢?当时不知道less,只想到一种办法,就…

展望2021,Java、Go、.NET,谁主沉浮?

伴随着年底.NET社区活动,近日跟几位微软MVP大佬聊天请益,收获颇丰。程序员都有个话题避不开,就是各编程语言的优劣,大佬们的见识既有意思也有深度,这里为大家整理一下,其中Java、Golang和.NET是讨论焦点。J…

labuladong 的算法小抄_关于算法笔试的几个套路,一点就透

以下文章来源于labuladong ,作者labuladong我知道各位是被标题吸引进来的,那就不废话,先说几个算法笔试的硬核套路,再说说语言选择和做题复习的策略。避实就虚大家也知道,大部分笔试题目都需要你自己来处理输入数据&am…

TVP两周年:携手同行,让未来可见

TVP两周年2018年12月15日,在北京的腾讯云社区开发者大会上,作为腾讯云构建开发者生态的重要战略,TVP计划正式发布。2020年12月15日,不知不觉,腾讯云TVP已经走过了两度春秋。从0到1的探索,1到10的成长&#…

加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!

Hutool 谐音 “糊涂”,寓意追求 “万事都作糊涂观,无所谓失,无所谓得” 的境界。Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以 “…

Oh my God, Swagger API文档竟然可以这样写?

最好的总会在不经意间出现。“作为后端程序员,免不了与前端同事对接API, 一个书写良好的API设计文档可有效提高与前端对接的效率。为避免联调时来回撕逼,今天我们聊一聊正确编写Swaager API文档的姿势。基础Swagger用法在ConfigureServices配…

vue 前端设置允许跨域_web 前端的一些小问题

关于vue使用axios post发送json数据跨域请求403的解决方法:1. 问题vue开发的时候,使用axios跨域发送请求,同时post发送的数据格式是json格式,发送出去的时候发现控制台报错403,返回的信息提示是跨域的问题,…

如何在 Windows 10 上安装 WSL 2

翻译自 Joey Sneddon 2020年10月30日的文章《How to Install WSL 2 on Windows 10》 [1]如果您想在最新的 Windows 版本中尝试经过改进的 Windows 子系统 Linux 2 (即 WSL 2) [2],要怎么做呢?我们在本文中介绍了安装它所需要做的所有事情。WSL 2 是微软早…