机器学习——支持向量机

支持向量机(SVM)

在这里插入图片描述

超平面最大间隔
在这里插入图片描述

硬间隔和软间隔
在这里插入图片描述
在这里插入图片描述
sklearn.svm
注意实例化有所不同

from sklearn import svm
x=[[0,0],[1,1]]
y=[0,1]
ss=svm.SVC()
ss.fit(x,y)
ss.predict([[2,2]])

array([1])

SVM算法原理

定义输入数据
在这里插入图片描述

线性可分支持向量机

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

目标函数

在这里插入图片描述
拉格朗日乘子法
在这里插入图片描述
在这里插入图片描述

对偶问题
在这里插入图片描述
整体流程
在这里插入图片描述

损失函数

0/1损失、SVM Hinge损失函数、Logistic损失函数

sklearn.metrics.zero_one_loss
sklearn.metrics.hinge_loss
sklearn.metrics.log_loss

在这里插入图片描述

核方法

核函数
将原始输入空间映射到新的特征空间,从而,使得原本线性不可分的样本可能在核空间可分
在这里插入图片描述

常见核函数
在这里插入图片描述
应用最广的是RBF核

SVM回归

让尽可能多的实例位于预测线上,同时限制间隔违例(也就是不再预测线距上的实例)
在这里插入图片描述

算法api再介绍

在这里插入图片描述
SVC
class sklearn.svm.SVC(C=1.0,kernel='rbf',degree=3,coef0=0.0,random_state=None)
在这里插入图片描述
在这里插入图片描述

NuSVC
class sklearn.svm.NuSVC(nu=0.5)
在这里插入图片描述

LinearSVC
class sklearn.svm.LinearSVC(penalty='l2',loss='squared_hinge',dual=True,C=1.0)
在这里插入图片描述

数字识别器

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.model_selection import train_test_split
train=pd.read_csv('./data1/mnist/train.csv')
#确定特征值和目标值
train_image=train.iloc[:,1:]
train_label=train.iloc[:,0]
#1.2查看具体图像
num=train_image.iloc[0,].values.reshape(28,28)
plt.imshow(num)
plt.axis('off')
plt.show()

在这里插入图片描述

def to_plot(n):
    num=train_image.iloc[n,].values.reshape(28,28)
    plt.imshow(num)
    plt.axis('off')
    plt.show()
o_plot(n=100)

在这里插入图片描述

#2数据基本处理
#2.1对数据特征值归一化处理
train_image=train_image.values/255
train_label=train_label.values

#2.2数据集分割
x_train,x_val,y_train,y_val=train_test_split(train_image,train_label,train_size=0.8,random_state=0)
#2.3特征降维和模型训练
import time
from sklearn.decomposition import PCA
def n_components_analysis(n,x_train,y_train,x_val,y_val):
    start=time.time() #记录开始时间
    pca=PCA(n_components=n) #pca降维实现
    print('特征降维,传递的参数为:{}'.format(n))
    pca.fit(x_train)
    x_train_pca=pca.transform(x_train) #训练集和测试集进行降维
    x_val_pca=pca.transform(x_val)
    print('开始使用svc进行训练') #利用svc进行训练
    ss=svm.SVC()
    ss.fit(x_train_pca,y_train)
    accuracy=ss.score(x_val_pca,y_val) #获取accuracy结果
    end=time.time() #记录结束时间
    print('准确率是:{},消耗时间是:{}s'.format(accuracy,int(end-start)))
    return accuracy
#3传递多个n_components,寻找合理的n_components
n_s=np.linspace(0.70,0.85,num=5)
accuracy=[]
for n in n_s:
    tmp=n_components_analysis(n,x_train,y_train,x_val,y_val)
    accuracy.append(tmp)

在这里插入图片描述

#4准确率可视化展示
plt.plot(n_s,np.array(accuracy),'r')
plt.show()

在这里插入图片描述
经过图像展示,选择合理的n_components,最后综合考虑确定结果为:0.80

#5确定最优模型
pca=PCA(n_components=0.80)
pca.fit(x_train)
pca.n_components_

43

x_train_pca=pca.transform(x_train)
x_val_pac=pca.transform(x_val)

#6训练比较优的模型,计算accuracy
ss1=svm.SVC()
ss1.fit(x_train_pca,y_train)
ss1.score(x_val_pac,y_val)

0.979047619047619

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醋酸洋红就是我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值