SVM支持向量机

支持向量机是一个监督学习算法,即可用于回归也可用于分类,但主要用于分类。用于分类时支持向量机是一种二分类模型,其基本模型是定义在特征空间上的间隔最大线性分类器,SVM的学习策略就是间隔最大化,可化为一个求解凸二次规划的问题。支持向量机对离散值具有鲁棒性。常用的核函数有线性核函数、高斯核函数、多项式核函数、拉普拉斯核函数、sigmoid核函数。

SVM目标函数定义、核函数等相关内容见:吴恩达机器学习总结

相关推导参考:https://blog.csdn.net/macyang/article/details/38782399

https://blog.csdn.net/qq_41577045/article/details/79844545

https://www.ibm.com/developerworks/cn/analytics/library/machine-learning-hands-on1-svn/index.html

https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html

https://www.analyticsvidhya.com/blog/2017/09/understaing-support-vector-machine-example-code/

import numpy as np
from sklearn.datasets import make_blobs
from sklearn.datasets import make_circles
from sklearn.svm import SVC
import matplotlib.pyplot as plt

X,y=make_blobs(n_samples=50,centers=2,cluster_std=0.6,random_state=0)
# X,y = make_circles(100, factor=0.2, noise=.1)

# clf=SVC(kernel="rbf").fit(X,y)
clf=SVC(kernel="linear").fit(X,y)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap="rainbow")
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 要画决策边界,必须要有网格
axisx = np.linspace(xlim[0], xlim[1], 30)
axisy = np.linspace(ylim[0], ylim[1], 30)
# 将两个一维数组变成二维数组
axisx, axisy = np.meshgrid(axisx, axisy)

xy = np.vstack([axisx.ravel(), axisy.ravel()]).T
P = clf.decision_function(xy).reshape(axisx.shape)
# 画决策边界到平行决策边界的超平面
ax.contour(axisx, axisy, P,c='k',levels=[-1, 0, 1],alpha=0.5,linestyle=['--', '-', '--'])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.xticks([])
plt.yticks([])
plt.show()

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics
cancer=datasets.load_breast_cancer()
# print('Features:',cancer.feature_names)
# print('Labels:',cancer.target_names)
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=109)
clf=svm.SVC(kernel='linear')
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)
acc=metrics.accuracy_score(y_test,y_pred)
w=clf.coef_
b=clf.intercept_
num_support_vector=clf.n_support_#支持向量机的个数
sv_idx=clf.support_#支持向量机的索引
print('Accuracy:',acc)
print('Accuracy:',clf.score(X_test,y_test))
print('w=',w)
print('b=',b)
print('num_sv=',num_support_vector)

matlab工具箱实现SVM回归/分类

clear;
clc;
format compact;
%使用工具箱进行二维函数曲线拟合
%生成待回归的数据
x =(-1:0.01:1)';
y = x.^5 +2*x.^4 + 6*x.^3;
figure(1);
plot(x,y,'rd');
hold on;
 
% 训练模型
model =svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');
%利用建立的模型看其在训练集合上的回归效果
[py,mse,devalue]= svmpredict(y,x,model);

%画预测图
plot(x,py,'b-');
legend('原始数据','回归数据');
grid on;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值