支持向量机
·

案例:数字识别器
学习⽬标
应⽤SVM算法实现数字识别器
1 案例背景介绍

MNIST是计算机视觉事实上的“hello world”数据集。⾃1999年发布以来,这⼀经典的⼿写图像数据集已成为分类算法基准测试的基础。随着新的机器学习技术的出现,MNIST仍然是研究⼈员和学习者的可靠资源。
本次案例中,我们的⽬标是从数万个⼿写图像的数据集中正确识别数字。
2 数据介绍
1> 数据⽂件train.csv和test.csv包含从0到9的⼿绘数字的灰度图像。
2> 每个图像的⾼度为28个像素,宽度为28个像素,总共为784个像素。
3> 每个像素具有与其相关联的单个像素值,指示该像素的亮度或暗度,较⾼的数字意味着较暗。该像素值是0到255之间的整数,包括0和255。
4> 训练数据集(train.csv)有785列。第⼀列称为“标签”,是⽤户绘制的数字。其余列包含关联图像的像素值。
5> 训练集中的每个像素列都具有像pixelx这样的名称

测试数据集(test.csv)与训练集相同,只是它不包含“标签”列。
数据集下载地址:- MNIST手写数字数据集(Kaggle)
3 案例实现
1】尝试使用5个不同的PCA的值(小数) 通过SVC模型 训练 得到不同的准确率
2】可视化
3】特征需要进行标准化处理 /255
"""""
学习⽬标
应⽤SVM算法实现数字识别器
1 案例背景介绍
MNIST是计算机视觉事实上的“hello world”数据集。⾃1999年发布以来,这⼀经典的⼿写图像数据集已成为分类算法基准测试的基础。随着新的机器学习技术的出现,MNIST仍然是研究⼈员和学习者的可靠资源。
本次案例中,我们的⽬标是从数万个⼿写图像的数据集中正确识别数字。
2 数据介绍
1> 数据⽂件train.csv和test.csv包含从0到9的⼿绘数字的灰度图像。
2> 每个图像的⾼度为28个像素,宽度为28个像素,总共为784个像素。
3> 每个像素具有与其相关联的单个像素值,指示该像素的亮度或暗度,较⾼的数字意味着较暗。该像素值是0到255之间的整数,包括0和255。
4> 训练数据集(train.csv)有785列。第⼀列称为“标签”,是⽤户绘制的数字。其余列包含关联图像的像素值。
5> 训练集中的每个像素列都具有像pixelx这样的名称
3 案例实现
1】尝试使用5个不同的PCA的值(小数) 通过SVC模型 训练 得到不同的准确率
2】可视化
3】特征需要进行标准化处理 /255
"""""
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
data=pd.read_csv("./train.csv")
print(data.head())
print(data.shape)
print(data.dtypes)
data_x=data.iloc[:,1:]
y=data.iloc[:,0]
transfer=StandardScaler()
data_x=transfer.fit_transform(data_x)
print(data_x)
plt.figure()
n_components=[0.4,0.5,0.6,0.7,0.8]
sc=[]
for i in n_components:
transfer = PCA(n_components=i)
x=transfer.fit_transform(data_x)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
model = SVC(kernel="linear", C=1.0)
model.fit(x_train, y_train)
score=model.score(x_test, y_test)
print(f"n_components={i}的准确率:", score)
sc.append(score)
# y_pred = model.predict(x_test)
# print(accuracy_score(y_test, y_pred))
plt.plot(n_components,sc)
plt.xlabel("PCA值")
plt.ylabel("准确率")
plt.title("准确率随PAC变化")
plt.show()


乳腺癌分类预测
项目背景
你在一家医疗数据分析公司工作,需要基于威斯康星州乳腺癌诊断数据集建立一个SVM分类模型,帮助医生预测肿瘤是良性还是恶性。数据集包含肿瘤的各种特征如半径、纹理、周长等。
数据集
题目要求
- 使用Pandas加载数据集并进行探索性数据分析(EDA)
- 使用Numpy处理缺失值
- 使用matplotlib绘制特征分布图
- 构建SVM分类模型并评估其性能
- 绘制决策边界可视化(选择两个主要特征)
"""""
项目背景
你在一家医疗数据分析公司工作,需要基于威斯康星州乳腺癌诊断数据集建立一个SVM分类模型,帮助医生预测肿瘤是良性还是恶性。数据集包含肿瘤的各种特征如半径、纹理、周长等。
数据集
威斯康星州乳腺癌诊断数据集
题目要求
1.使用Pandas加载数据集并进行探索性数据分析(EDA)
2.使用Numpy处理缺失值
3.使用matplotlib绘制特征分布图
4.构建SVM分类模型并评估其性能
5.绘制决策边界可视化(选择两个主要特征)
"""""
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.preprocessing import StandardScaler
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
data=pd.read_csv("./data.csv")
print(data)
print(data.shape)
print(data.dtypes)
print(data.isnull().sum())
data = data.drop('id', axis=1)
data['diagnosis'] = data['diagnosis'].map({'M':1, 'B':0})
# 诊断结果分布
plt.figure(figsize=(8, 5))
sns.countplot(x='diagnosis', data=data)
plt.title('诊断结果分布 (0=良性, 1=恶性)')
plt.show()
# 特征分布
features = data.columns[1:11]
plt.figure(figsize=(15, 15))
for i, feature in enumerate(features):
plt.subplot(5, 2, i+1)
sns.histplot(data[feature], bins=30, kde=True)
plt.title(feature)
plt.tight_layout()
plt.show()
# 准备数据
x=data.iloc[:,1:31]
y=data["diagnosis"]
print(x)
# 标准化
transfer=StandardScaler()
x=transfer.fit_transform(x)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
svm_model = SVC(kernel='rbf', C=10, gamma='scale', random_state=42)
svm_model.fit(x_train, y_train)
print("准确率:",svm_model.score(x_test,y_test))
# PCA降维
pca = PCA(n_components=2)
x_pca = pca.fit_transform(x)
x_train_pca, x_test_pca, y_train_pca, y_test_pca = train_test_split(x_pca, y, test_size=0.3, random_state=42)
svm_model_pca = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
svm_model_pca.fit(x_train_pca, y_train_pca)
# 创建网格用于绘制决策边界
x_min, x_max = x_pca[:, 0].min() - 1, x_pca[:, 0].max() + 1
y_min, y_max = x_pca[:, 1].min() - 1, x_pca[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
np.arange(y_min, y_max, 0.02))
# 预测每个网格点的类别
Z = svm_model_pca.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure()
plt.contourf(xx, yy, Z)
plt.scatter(x_pca[:, 0], x_pca[:, 1], c=y, edgecolors='k')
plt.xlabel('第一主成分')
plt.ylabel('第二主成分')
plt.title('决策边界')
plt.show()




更多推荐



所有评论(0)