有监督学习-支持向量机

支持向量机

原理: 参考链接, https://zhuanlan.zhihu.com/p/28660098
里面的内容讲解很全, 公式推导什么的都有, 但是简单总结下支持向量机

  1. 寻求最优分类边界
    正确:对大部分样本可以正确地划分类别。
    泛化:最大化支持向量间距。
    公平:与支持向量等距。
    简单:线性,直线或平面,分割超平面。

  2. 基于核函数的升维变换
    通过名为核函数的特征变换,增加新的特征,使得低维度空间中的线性不可分问题变为高维度空间中的线性可分问题。
    线性核函数:linear,不通过核函数进行维度提升,仅在原始维度空间中寻求线性分类边界。
    多项式核函数:poly,通过多项式函数增加原始样本特征的高次方幂
    径向基核函数:rbf,通过高斯分布函数增加原始样本特征的分布概率

SVM python 用例

本次用例根据声音和语音的声学特性来识别男性或女性的声音。这个数据集由3168个录音样本组成,这些样本来自男性和女性。语音样本在seewave和调谐器软件包中通过声学分析进行预处理,分析频率范围为0hz-280hz(人声范围)。
meanfreq:平均频率(kHz)
sd:频率标准差
median:中值频率(kHz)
Q25:第一个分位数(单位:kHz)
Q75:第三分位数(单位:kHz)
IQR:分位数范围(单位:kHz)
skew:偏斜
kurt:峰度
sp.ent:光谱熵
sfm: 平坦度
model:模式频率
centroid:频率质心
peakf:峰值频率(能量最高的频率)
meanfun:通过声学信号测量的基频平均值
minfun:通过声信号测量的最小基频
maxfun:通过声信号测量的最大基频
meandom:通过声学信号测量的主频的平均值
mindom:声信号中测得的主频最小值
maxdom:通过声信号测量的主频的最大值
dfrange:通过声信号测量的主频范围
modindx:调制指数。计算为基频相邻测量值之间的累积绝对差除以频率范围
label:男或女

其实在做核函数选择的时候, 有时候会纠结, 但是较麻烦的方法, 还是都用一下, 看看哪个模型好就用哪个.
读取数据:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('voice.csv')
data.head()

在这里插入图片描述
检查数据
在这里插入图片描述
在这里插入图片描述
整理数据

# 数据清洗
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data["label"]=le.fit_transform(data["label"])
data["label"]

在这里插入图片描述
划分自变量和因变量

y = data["label"]
X = data.drop(["label"], axis = 1)

归一化处理, 减小量纲

# 归一化
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler as mms 
Xtrain,Xtest,Ytrain,Ytest=train_test_split(X,y,test_size=0.2,random_state=420)
MMS_01=mms().fit(Xtrain)
MMS_02=mms().fit(Xtest)
X_train=MMS_01.transform(Xtrain) 
X_test =MMS_02.transform(Xtest)

数据可视化
其实中间应该有个理解数据, 通过可视化可以看看特征之间的趋势和关联, 在此处就先略过. 对于业务理解的同学来讲, 此步骤不应该省略的, 小笨我也只是偷个懒.

调用SVM

from sklearn.svm import SVC
svm = SVC(random_state = 1)
svm.fit(x_train, y_train)

利用网格搜索对三种核函数进行最优模型选择

# 基于径向基核函数的支持向量机分类器
from sklearn.model_selection import GridSearchCV
params = [{'kernel':['linear'],},
    {'kernel':['poly'], 'degree':[2, 3],}, 
    {'kernel':['rbf'], 'C':[1,10,100,1000], 'gamma':[1, 0.1, 0.01, 0.001]}]
model = GridSearchCV(SVC(), params,cv= 6)
model.fit(X_train, Ytrain)
# 获取得分最优的的超参数信息
print(model.best_params_)
# 获取最优得分
print(model.best_score_)
# 获取最优模型的信息
print(model.best_estimator_)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值