机器学习模型-支持向量机(SVM)
二.代码实现
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import warnings
warnings.filterwarnings('ignore')
data = datasets.load_breast_cancer()
x = data.data;y = data.target
y[y==0] = -1
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)
omega = np.zeros(x.shape[1])
b = 0
lr = 0.01
C = 1
maxgen = 500
for L in range(maxgen):
error = 1 - (np.dot(x_train,omega)+b)*y_train
index = np.argmax(error)
if error[index] > 0:
omega = (1-lr)*omega + lr*C*y_train[index]*x_train[index,:]
b = b + lr*C*y_train[index]
else:
break
predict_train = np.sign(np.dot(x_train,omega)+b)
train_acc = len(np.where(predict_train==y_train)[0])/len(y_train)
predict_test = np.sign(np.dot(x_test,omega)+b)
test_acc = len(np.where(predict_test==y_test)[0])/len(y_test)
print('Train acc = ',round(train_acc,4),' Test acc = ',round(test_acc,4))
三.SMO算法实现
import numpy as np
from sklearn import datasets
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import warnings
warnings.filterwarnings('ignore')
data = datasets.load_breast_cancer()
x = data.data;x = preprocessing.MinMaxScaler().fit_transform(x)
y = data.target;y[y==0] = -1
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)
alpha = np.zeros(x_train.shape[0])
b = 0
C = 1
p = np.zeros(x_train.shape[0])
maxgen = 100
def gramMat(x):
v = []
for i in x:
for j in x:
k = np.dot(i,j.T)
v.append(k)
gram = np.array(v).reshape(len(x),len(x))
return gram
K = gramMat(x_train)
def selectFirstSample(K,y,p,alpha,b,C):
threshold = 0.001
c = y*p-1
c1 = c.copy();c2=c.copy();c3=c.copy()
c1[(alpha > 0) & (c >= 0)] = 0
c2[((alpha==0) | (alpha==C)) & (c==0)] = 0
c3[(alpha < 0) & (c www.tiaotiaoylzc.com/ <= 0)] = 0
error = c1**2+c2**2+c3**2
index = np.argmax(error)
if error[index] >= threshold:
return index
else:
return None
def selectSecondSample(id1,y_train):
id2 = np.random.randint(www.ysyl157.com len(y_train))
while id1 == id2:
id2 = np.random.randint(len(y_train))
return id2
def boundary(y,id1,id2,C):
if y[id1] =www.xgll521.com= y[id2]:
lb = max(0,alpha[id1]+alpha[id2]-C)
ub = min(C,alpha[id1]+alpha[id2])
else:
lb = max(0,alpha[id2]-alpha[id1])
ub = min(C,C+alpha[id2]-alpha[id1])
return lb,ub
def updateAlpha(K,y,p,id1,id2,lb,ub,C):
old_alpha1 = alpha[id1];old_alpha2 = alpha[id2]
p1 = p[id1];p2 = p[id2]
y1 = y[id1];y2 = y[id2]
E1 = p1 - y1;E2 = p2 - y2
beta = 2*K[id1,id2] - K[id1,id1] - K[id2,id2]
new_alpha2 = old_alpha2 - y2*(E1-E2)/beta
if new_alpha2 > ub:
new_alpha2 = ub
if new_alpha2 < lb:
new_alpha2 www.taohuaqing178.com= lb
alpha[id2] = new_alpha2
new_alpha1 = old_alpha1 - y1*y2*(new_alpha2 - old_alpha2)
alpha[id1] = new_alpha1
deta1 = new_alpha1 - old_alpha1
deta2 = new_alpha2 - old_alpha2
dw = [y1*deta1,y2*deta2]
b1 = -E1 - y1*K[id1,id1]*deta1 - y2*K[id1,id2]*deta2
b2 = -E2 - y1*K[id1,id2]*deta1 - y2*K[id2,id2]*deta2
if new_alpha1 >=0 and new_alpha1 <= C:
db = b1
elif new_alpha2 >www.thd178.com/ =0 and new_alpha2 <= C:
db = b2
else:
db = (b1 + b2)/2
p = p + dw[0]*K[id1,:].T + dw[1]*K[id2,:].T + db
return p
for L in range(maxgen):
id1 = selectFirstSample(K,y_train,p,alpha,b,C)
id2 = selectSecondSample(id1,y_train)
lb,ub = boundary(y_train,id1,id2,C)
p = updateAlpha(K,y,p,id1,id2,lb,ub,C)
index = np.argmax((alpha!=0)&(alpha!=C))
b = y_train[index] - np.sum(alpha*y_train*K[:,index])
predict_train = np.sign(np.sum(alpha*y_train*K,axis=0)+b)
train_acc = len(np.where(predict_train==y_train)[0])/len(y_train)
predict_test = []
for arr in x_test:
v = np.sum(alpha*y_train*np.dot(x_train,arr.T))+b
predict_test.append(np.sign(v))
test_acc = len(np.where(predict_test==y_test)[0])/len(y_test)
print('self-written ==> Train acc = ',round(train_acc,4),' Test acc = ',round(test_acc,4))
model = SVC()
model.fit(x_train,y_train)
train_acc = model.score(x_train,y_train)
test_acc = model.score(x_test,y_test)
print('sklearn ==> Train acc = ',round(train_acc,4),' Test acc = ',round(test_acc,4))
机器学习模型-支持向量机(SVM)的更多相关文章
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- 机器学习:支持向量机(SVM)
SVM,称为支持向量机,曾经一度是应用最广泛的模型,它有很好的数学基础和理论基础,但是它的数学基础却比以前讲过的那些学习模型复杂很多,我一直认为它是最难推导,比神经网络的BP算法还要难懂,要想完全懂这 ...
- 机器学习算法 - 支持向量机SVM
在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...
- 【机器学习】支持向量机SVM
关于支持向量机SVM,这里也只是简单地作个要点梳理,尤其是要注意的是SVM的SMO优化算法.核函数的选择以及参数调整.在此不作过多阐述,单从应用层面来讲,重点在于如何使用libsvm,但对其原理算法要 ...
- python机器学习之支持向量机SVM
支持向量机SVM(Support Vector Machine) 关注公众号"轻松学编程"了解更多. [关键词]支持向量,最大几何间隔,拉格朗日乘子法 一.支持向量机的原理 Sup ...
- 机器学习(十一) 支持向量机 SVM(上)
一.什么是支撑向量机SVM (Support Vector Machine) SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法.在机器学习领域,是一个有监督 ...
- 机器学习-5 支持向量机SVM
一.概念和背景 SVM:Support Vector Machine 支持向量机. 最早是由Vladimir N. Vapnik和Alexey Ya. Chervonenkis在1963年提出的. 目 ...
- 机器学习(十一) 支持向量机 SVM(下)
支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间.特征空间的维数可能非常高.如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高 ...
- 吴裕雄--天生自然python机器学习:支持向量机SVM
基于最大间隔分隔数据 import matplotlib import matplotlib.pyplot as plt from numpy import * xcord0 = [] ycord0 ...
随机推荐
- 百度app红包? 百度全家桶?果断卸载
听说今年的春晚红包与百度合作.这不 刚又下载了一个百度app,之前下载过,太卡了,用户体验极.本身对百度也没啥好感,再加上这周看了:百度已死的文章,搜索全百家号.具体啥情况,你们百度搜一搜吧
- Phpstudy2018 集成环境配置虚拟域名访问到Index Of 下
(1) Phpstudy是一款php集成开发环境 可随意切换Php的版本以及服务器. Phpstudy的网站根目录默认为WWW目录,那么如果我们想通过虚拟域名访问到Index Of目录来便于查看 ...
- Python栈的学习资料
持续更新... 1. 基础 Python for Everybody的视频课程,称得上深入浅出 https://www.py4e.com/ 2. 进阶 偏重实践应用,快速上手,稀饭~ https:// ...
- python继续函数-练习(2017-8-3)
写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 def detection(p): intcount = 0 strcount = 0 othercount = 0 spa ...
- Tensorflow 笔记:第一讲
一. 基本概念 1. 什么是人工智能 人工智能的概念: 机器模拟人的意识和思维 重要人物: 艾伦·麦席森·图灵( Alan Mathison Turing) 人物简介: 1912 年 6 月 23 日 ...
- requests模块基础
requests模块 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bor ...
- 販売管理(SD)
SD(販売管理)系のSAP DBテーブル. 随時更新していきます. [得意先マスタ]KNA1: 一般データ KNB1: 会計データ KNBK: 銀行データ KNVV: 販売データ KNVP: 取引先機 ...
- 基于jersey和Apache Tomcat构建Restful Web服务(一)
基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...
- 『JavaScript』核心
弱类型语言 JavaScript是一种弱类型的语言.变量可以根据所赋的值改变类型.原始类型之间也可以进行类型转换.其弱类型的物质为其带来了极大的灵活性. 注意:原始类型使用值传递,复合类型使用引用传递 ...
- [B2B、B2C、C2C] 区别介绍
最近在学习建站系统的时候,偶尔我们的老大会说几个自己所不太了解的名词“简称”,所以呢?我就总结了一下,如果有不全面的地方,还请博友们多多指点! B2B B2B(也有写成BTB)是指企业对企业之间的营销 ...