机器学习——基于python的鸢尾花SVM练习(包含超参数批量筛选、交叉验证)

本文介绍了使用Python进行机器学习的SVM实践,通过鸢尾花数据集展示了如何进行最普通的SVM训练以及如何利用交叉验证和GridSearchCV进行超参数筛选和优化。实验结果显示,通过优化参数,模型在测试集上的准确率得到了显著提升。
摘要由CSDN通过智能技术生成


写在前面——虽然本人一直对机器学习感兴趣,但是一直没有动手实践,每次都是看一点入门就放弃了。现在因为课题需要,刚好可以边实践边学习。前面写了一个基于R语言的SVM练习,后来发现还是python好用啊。网上关于鸢(yuan)尾花的各种机器学习例子很多,但大部分都是浅浅一层。我最近在学习超参数优化跟交叉验证,所以就把它们揉在了一起。如有错误,还望大家批评指正。

数据来源:Iris数据集,下载地址为:http://archive.ics.uci.edu/ml/datasets/Iris
Iris.data中有5个属性,包括4个预测属性(萼片长度、萼片宽度、花瓣长度、花瓣宽度)和1个类别属性(Iris-setosa、Iris-versicolor、Iris-virginica三种类别)。

1. 最普通的SVM

这里没什么要说的,网上一大堆。放两个给大家参考一下。
https://www.cnblogs.com/luyaoblog/p/6775342.html
https://blog.csdn.net/qq_45769063/article/details/106628800

from sklearn import svm
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.utils import shuffle
from sklearn.model_selection import RepeatedKFold

# 将label与数字对应,简化数据集
def Iris_label(s):
    it = {
   b'Iris-setosa': 0, b'Iris-versicolor': 1, b'Iris-virginica': 2}
    return it[s]

# 载入数据
path = 'iris.data'
data = np.loadtxt(path, dtype=float, delimiter=',', converters={
   4: Iris_label})
# print(data.shape) output:(150, 5)
# print(data.dtype) output:float64

# 在第4列之后进行切割,切割成2份
# axis=1表示竖着切
x, y = np.split(data, indices_or_sections=(4,), axis=1)
x = x[:, 0:2]
# 打乱数据集,使结果更加准确
x, y = shuffle(x, y, random_state=123)
# print(x, y)
# 划分训练集与测试集
# random_state相当于随机数种子,方便复现结果
train_data, test_data, train_label, test_label = train_test_split(x, y, random_state=1, train_size=0.7, test_size=0.3)

# 训练
classifier = svm.SVC(C=1, kernel='rbf', gamma=10)
classifier.fit(train_data, train_label.ravel())
# ravel()把标签集转换为list
# print(train_label.shape) output:(105, 1)
# print(train_label.ravel().shape) output:(105,)

# 计算准确率
print("train:", classifier.score(train_data, train_label)
  • 10
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值