机器学习练习6-支持向量机

本文基于Andrew_Ng的ML课程作业

1-Linear Support Vector Classification: svm.LinearSVC:线性分类的支持向量机

导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat
from sklearn import svm

函数:画出决策曲线

def plot_decision_boundary(svc,x1min,x1max,x2min,x2max,data):  #画出决策曲线
    t1=np.linspace(x1min,x1max,1000)
    t2=np.linspace(x2min,x2max,1000)
    cordinates=[(x1,x2) for x1 in t1 for x2 in t2]
    x1_cord,x2_cord=zip(*cordinates)
    h_val=pd.DataFrame({'X1':x1_cord,'X2':x2_cord})
    h_val['hval']=svc.decision_function(h_val[['X1','X2']])
        #函数:svc.decision_function(X):样本X到分割超平面的函数距离,这里就是预测值
    decision=h_val[np.abs(h_val['hval'])<2*10**-3]
    x1plot,x2plot=decision['X1'],decision['X2']
    fig,ax=plt.subplots(figsize=(12,8))
    positive = data[data['y'].isin([1])]
    negative = data[data['y'].isin([0])]
    ax.scatter(positive['X1'], positive['X2'], s=50, marker='o', label="Positive")
    ax.scatter(negative['X1'], negative['X2'], s=50, marker='x', label="Negative")
    ax.scatter(x1plot,x2plot,s=10,c='r',label="Boundary")
    ax.set_title("SVM(C=100) Decision Boundary")
    ax.legend(loc='upper right')
    plt.show()

主函数:

# Linear Support Vector Classification: svm.LinearSVC:线性分类的支持向量机

raw_data=loadmat('ex6data1.mat')
data=pd.DataFrame(raw_data.get('X'),columns=['X1','X2'])    #这里不用X=data['X']然后后面svc.fit(X,y)原因:用Dataframe标明特征名称标签方便单独取某一特征的值data['X1']
    #dict.get(key):利用键获取值,当字典中不存在输入的键时返回None,相比dict[key]程序运行时就不会出异常(这里得到的值是一个n行2列的数组)
data['y']=raw_data.get('y')
svc=svm.LinearSVC(C=1.0,loss='hinge',max_iter=3000)
    #svm.LinearSVC(C=1.0,loss=' ',max_iter= )
    #参数:C:float,(default=1.0)错误项的惩罚参数;loss:'hinge'or'squared_hinge'(default='squared_hinge')指定损失参数,"hinge":标准的SVM损失(例如由SVC类使用);"squared_hinge":hinge损失的平方;max_iter:(default=1000)运行的最大迭代次数
svc.fit(data[['X1','X2']],data['y'])    #data[['X1','X2']]套双中括号才能同时取出X1和X2列的数据,data['X1','X2']无法取数,[data['X1'],data['X2']]分别取不是同时取
    #函数:svc.fit(X,y):根据给定的训练数据拟合SVM模型
print('accuracy={:.2%}'.format(svc.score(data[['X1','X2']],data['y'])))
    #函数:svc.score(X,y):返回给定测试数据和标签的平均精确度
plot_decision_boundary(svc,0,4,1.5,5,data)

预测准确率(C=1)

 决策曲线(C=1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值