100天搞定机器学习(100-Days-Of-ML)(六)支持向量机SVM

第六天:支持向量机SVM

支持向量机SVM是一个有监督的机器学习算法,它可用于分类和回归分析,最主要是用再分类问题中。在这个算法中,根据特征值,构建一个n维空间(其中n即是特征数量),把每个数据点投影到此空间内。通过查找一个超平面,把数据区分成两类。换句话说,算法输出一个最佳超平面,用于数据分类。对于SVM来说,它指的是距离两类数据最远的一个超平面,即是此超平面到最近元素的距离最远。

 

数据集同第五天用的是Social_Network_Ads。

第一步:导入库并加载数据集

数据集如下:

导入库:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
-------------------------------
加载数据集:
dataset = pd.read_csv('E:/datasets/Social_Network_Ads.cs')
X = dataset.iloc[ : , [2, 3]].values
Y = dataset.iloc[ : , 4].values
--------------------------------------------
打印查看数据集是否加载正确
print(X[0])
print(Y[0])

第二步:划分数据集为测试集和训练集

from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)

Tips:有关train_test_split说明

train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata
train_test_split在17之前是cross_validation.train_test_split用法
在之后都是model_selection.train_test_split用法
具体变化看详细文档,下面简单介绍几个重要的参数。
参数说明:
*arrays:可以是列表、numpy数组、scipy稀疏矩阵或pandas的数据框(train_features、train_labels)
test_size:可以是浮点、整数或者None
   浮点:测试集占总样本的百分
   整数:测试集等于样本数
   None:默认是0.25
random_state:可以为整数、RandomState实例或None,默认为None
   整数:每次生成的数据都是相同的
   None:随机生成数据
stratify:可以是类似数组或None
   None:划分出来的测试集或训练集中,其类标签的比例也是随机的
   不为None:划分的测试集或训练集,其类标签的比例同输入的数组中的类标签比例,可以用于处理不均衡的数据集。

第三步:特征缩放

from sklearn.preprocessing import StandardScaler
sc = StandardScaler() //创建模型
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)

第四步:训练SVM模型

from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, Y_train)

Tips:SVC主要参数说明

sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, 
shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None,
verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
-------------------------
每个版本的参数都是不一样的,这是21版本的参数解释。
主要参数说明:
C:惩罚参数,这个就不用多说了,C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,
趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。
C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
kernel:核函数,核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’
degree:多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
gamma:‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。
coef0:核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
tol :停止训练的误差值大小,默认为1e-3
max_iter :最大迭代次数。-1为无限制。

第五步:预测结果并输出混淆矩阵

预测:
Y_pred = classifier.predict(X_test)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(Y_test, Y_pred)
-------------------------------------
打印混淆矩阵
print(cm)

第六步:结果的可视化

from matplotlib.colors import ListedColormap
X_set, Y_set = X_train, Y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(Y_set)):
    plt.scatter(X_set[Y_set == j, 0], X_set[Y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值