楼主: casey_c
1982 3

[程序分享] Scikit-Learn 支持向量机人脸识别 [推广有奖]

  • 0关注
  • 10粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
96 个
通用积分
2.1003
学术水平
2 点
热心指数
15 点
信用等级
2 点
经验
11502 点
帖子
278
精华
0
在线时间
94 小时
注册时间
2016-11-22
最后登录
2022-5-2

楼主
casey_c 发表于 2017-6-23 11:16:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币




以下内容转自 数析学院,只节选了部分,有需要的同学可以直接查看原文



在 Python 中如何利用 Scikit-Learn 等工具库构建并使用支持向量机模型


  1. %matplotlib inline
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from scipy import stats

  5. # 调用 seaborn ,并将其设置为绘图默认配置
  6. import seaborn as sns; sns.set()
复制代码


利用 make_blobs 函数生成本节示例数据——两组有明显集群特征的随机样本点:


  1. from sklearn.datasets.samples_generator import make_blobs
  2. X, y = make_blobs(n_samples=50, centers=2,
  3.                   random_state=0, cluster_std=0.60)
  4. plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn');
复制代码
1.jpg

我们都知道,支持向量机以线性分类器为基础,通过构造高维空间中的超平面来对样本的分类进行判别,为了更好的刻画支持向量机的模型效果,这里我们先向大家简单演示二维空间中分类平面与间隔的绘制方法,以为后续内容做准备:


  1. xfit = np.linspace(-1, 3.5)
  2. plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
  3. plt.plot([0.6], [2.1], 'x', color='red', markeredgewidth=2,
  4.          markersize=10)

  5. for m, b in [(1, 0.65), (0.5, 1.6), (-0.2, 2.9)]:
  6.     plt.plot(xfit, m * xfit + b, '-k')

  7. plt.xlim(-1, 3.5);
复制代码
2.jpg

支持向量机中,几何间隔是分类器的重要属性,可以通过如下方法在二维空间中绘制分类平面的几何间隔:


  1. xfit = np.linspace(-1, 3.5)
  2. plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')

  3. for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55),
  4.                 (-0.2, 2.9, 0.2)]:
  5.     yfit = m * xfit + b
  6.     plt.plot(xfit, yfit, '-k')
  7.     plt.fill_between(xfit, yfit - d, yfit + d,
  8.                      edgecolor='none', color='#AAAAAA',
  9.                      alpha=0.4)

  10. plt.xlim(-1, 3.5);
复制代码
3.jpg

准备工作就绪,接下来我们导入 Scikit-Learn 的支持向量机工具包 SVC ,并对模型进行构建与训练:



  1. from sklearn.svm import SVC # "支持向量分类器"
  2. model = SVC(kernel='linear', C=1E10)
  3. model.fit(X, y)
复制代码


SVC(C=10000000000.0, cache_size=200, class_weight=None, coef0=0.0,  decision_function_shape=None, degree=3, gamma='auto', kernel='linear',  max_iter=-1, probability=False, random_state=None, shrinking=True,  tol=0.001, verbose=False)
利用以上演示过的内容,构建如下函数 plot_svc_decision_function ,用于描绘我们训练的支持向量分类器在二维空间中的分类边界:
  1. def plot_svc_decision_function(model, ax=None, plot_support=True):
  2.     """绘制一个二维支持向量分类器的分类边界"""
  3.     if ax is None:
  4.         ax = plt.gca()
  5.     xlim = ax.get_xlim()
  6.     ylim = ax.get_ylim()
  7.    
  8.     # create grid to evaluate model
  9.     x = np.linspace(xlim[0], xlim[1], 30)
  10.     y = np.linspace(ylim[0], ylim[1], 30)
  11.     Y, X = np.meshgrid(y, x)
  12.     xy = np.vstack([X.ravel(), Y.ravel()]).T
  13.     P = model.decision_function(xy).reshape(X.shape)
  14.    
  15.     # 绘制 decision boundary 和 decision margins
  16.     ax.contour(X, Y, P, colors='k',
  17.                levels=[-1, 0, 1], alpha=0.5,
  18.                linestyles=['--', '-', '--'])
  19.    
  20.     # 绘制支持向量
  21.     if plot_support:
  22.         ax.scatter(model.support_vectors_[:, 0],
  23.                    model.support_vectors_[:, 1],
  24.                    s=300, linewidth=1, facecolors='none');
  25.     ax.set_xlim(xlim)
  26.     ax.set_ylim(ylim)
复制代码

对于本节的示例数据,模型训练得出的分类边界如下所示:
  1. plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
  2. plot_svc_decision_function(model);
复制代码
4.jpg
通过模型的 support_vectors_ 属性,我们可以查看模型中的支持向量:
  1. model.support_vectors_
复制代码
array([[ 0.44359863,  3.11530945],       [ 2.33812285,  3.43116792],       [ 2.06156753,  1.96918596]])

以上内容节选自 数析学院,后文还有介绍 其他核函数分类器以及人脸识别实例等,内容较多,先搬运到这,有需要的同学可以先直接到 数析学院 查看原文

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:scikit-learn Learn 支持向量机 人脸识别 Earn 学院

沙发
casey_c 发表于 2017-6-27 16:32:34

藤椅
lianqu 发表于 2017-7-2 23:15:47
非常感谢,好好学习一下~

板凳
casey_c 发表于 2017-7-4 10:32:59

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 06:05