02_07 python机器学习_第二章监督学习_核支持向量机

第二章监督学习_核支持向量机

核支持向量机的英文表示是: kernelized support vector machine 一般叫做SVM.
核:
 模型中有针对不同数据样本封装好的核方法,核应当指的就是这些函数.
核方法:
 在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,
从而变为线性可分的,这就是核方法。
核技巧:
 将低维空间处理不了的问题转化到高维空间来处理的技巧.
支持向量:
 SVM在学习过程中对每个计算对于决策边界的重要性,通常影响决策边界的只有小部分的数据点
这些点称作支持向量.
总结:
 使用核函数将低维空间难于处理的数据在处理高维空间进行解析处理的模型.

01 线性模型与非线性特征


SVM这个到倒是看到过,早在线性模型时就接触过,
不过当时书上只讲解了[LogisticRegression],另一个就是[LinearSVC]只是提到过.
他们都是线性模型,模型特点应当都差不多.把当时总结的内容拿出来再回忆一下.

LinearRegression优点:
 善于分析多特征数据
LinearRegression缺点:
 LinearRegression模型更多的是注重数据的线性趋势,因此在精度上会有一定的损失
 不适合特征数较少的数据
 不适合拥有多特征但大多是无效特征的数据
 没有参数来控制模型的复杂度,因此会出现训练集过拟合,测试集欠拟合的情况出现
LinearRegression使用建议:
 适合多特征且多数为有效的数据样本来预测数据的未来走势.

对于线性模型在针对较少特征数据样本表现不好上是有解决方案的.
书中给出的方案是添加非线性特征.
书中介绍两种方法

  • 交互项
    一文轻松看懂交互作用
    比如: 既存特征A,B -> 扩张特征C=A*B 只是举个例子,实际可以更复杂
    简单理解就是:混杂多个特征.
  • 多项式
    多项式百度词条
    由多个单项式构成.
    简单理解就是:不能直接拿到值,必须通过计算求值.

这两种方案都是通过现有数据特征,在原有数据样本中扩张出新特征的方法.
使用一个例子来说明.

01_001 非线性特征在线性模型[LinearSVC]中的显示效果

# 核支持向量机
# 共4个例子:
# 例子1: 线性模型&平面&分类
#   用于显示线性模型在平面上处理分类问题的不足.
# 例子2: 线性模型&3D空间&分类
#   在3D环境中观察线性模型处理多特征的效果
# 例子3: 线性模型&3D空间&分类&决策边界
#   演示在3D环境中如何正确施画决策边界
# 例子4: 线性模型&3D空间&分类&决策边界&超平面
#   演示如何在超平面中描述空间上的决策边界
import mglearn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.svm import LinearSVC
from mpl_toolkits.mplot3d import Axes3D

# 创建4分类聚类数据
X, y = make_blobs(centers=4, random_state=0)
# 将4分类强行转变成2分类,(数据样本不变只y是改变了最终分类)
y = y % 2

##################################
# 在第一个画布上用线性模型构建平面图像
##################################
# 2特征4分类数据样本散点图和决策边界
# 获得新画布
fig1 = plt.figure()
# 取得当前画布的绘图对象
ax1 = plt.gca()
# 创建线性模型
linear_svc = LinearSVC().fit(X, y)
# 散点图
mglearn.discrete_scatter(X[:, 0], X[:, 1], y, ax=ax1, labels='LinearSVC')
# 平面决策边界
mglearn.plots.plot_2d_separator(linear_svc, X)


##################################
# 第二个画布上用线性模型构建3D图像
##################################
# 获得新画布
fig2 = plt.figure()
# 在新画布上创建3d绘图对象
# 参数: (这俩参数是控制表示角度的,不用记,用时自己调一调就行)
#   elev: 方位角
#   azim: 仰角
ax2 = Axes3D(fig2, azim=-158, elev=-176)
# 现在的数据不是只有两分类了吗,这里用了一个投机取巧的办法来区分这两类数据
# mask -> True 代表第一类数据
# ~mask -> False 代表第二类数据
mask = y == 0
# 为了填充3D模型定义Z轴, 在元数据样本上扩张了新的非线性特征
# 新特征使用第二特征的平方
X_new = np.hstack([X, X[:, 1:] ** 2])
# 在3D绘图对象上绘制第一分类数据的散点图
# 前三个参数位置分别代表 X轴, Y轴, Z轴
# c: color  b:blue, r:red
# cmap: color function   mglearn.cm2(绘图包提供的绘图解决方案)
# s: size
# marker: 图标
ax2.scatter(X_new[mask, 0], X_new[mask, 1],
            X_new[mask, 2], c='b', cmap=mglearn.cm2, s=60)
# 在3D绘图对象上绘制第二分类数据的散点图
ax2.scatter(X_new[~mask, 0], X_new[~mask, 1]</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值