首页 > 其他分享 >统计学习方法与实战——统计学习方法之感知机

统计学习方法与实战——统计学习方法之感知机

时间:2022-11-01 17:01:14浏览次数:437  
标签:plt self 学习 感知机 超平面 凸壳 data 统计


感知机

  • ​​感知机​​
  • ​​三要素分析​​
  • ​​模型​​
  • ​​策略​​
  • ​​损失函数选择​​
  • ​​算法​​
  • ​​原始形式​​
  • ​​对偶形式​​
  • ​​相关问题​​
  • ​​例子​​
  • ​​iris数据集分类实战​​
  • ​​数据集查看​​
  • ​​显示结果​​
  • ​​sklearn 实战感知机​​
  • ​​习题解答​​
  • ​​习题2.1​​
  • ​​解题步骤​​
  • ​​反证法​​
  • ​​习题2.2​​
  • ​​习题2.3​​
  • ​​凸壳​​
  • ​​线性可分​​
  • ​​线性可分证明凸壳不相交​​
  • ​​证明充分性:凸壳不相交\Rightarrow⇒线性可分​​
  • ​​证明步骤​​



感知机

  1. 感知机是根据输入实例的特征向量 统计学习方法与实战——统计学习方法之感知机_机器学习 对其进行二㺯分尖的线性分光模型:
    统计学习方法与实战——统计学习方法之感知机_损失函数_02
    感知机模型对应于输入空间 (特征空间) 中的分离超平面 统计学习方法与实战——统计学习方法之感知机_深度学习_03
  2. 感知机学习的策略是极小化损失函数:
    统计学习方法与实战——统计学习方法之感知机_深度学习_04
    损失函数对应于误分类点到分离超平面的总距离。
  3. 感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现。原始形式中,首先任意选取一个超平面, 然后用梯度下降法不断极小化目标函数。在这个过程中一次随机选取一个误分类点使其梯度下降。
    统计学习方法与实战——统计学习方法之感知机_机器学习_05
    当训练数据集线性可分时,感知机学习算法存在无穷多个解,其解由于不同的初值或不同的迭代顺序而可能有所不同。
    一分类模菖
    统计学习方法与实战——统计学习方法之感知机_深度学习_06
    给定训练集:
    统计学习方法与实战——统计学习方法之感知机_算法_07
    定义感知机的损失函数
    统计学习方法与实战——统计学习方法之感知机_机器学习_08
    算法
    随机梯度下降法 Stochastic Gradient Descent
    随机抽取一个点使其梯度下降。
    统计学习方法与实战——统计学习方法之感知机_损失函数_09
    当实例点被误分类,即位于分离超平面的错误侧,则调整 统计学习方法与实战——统计学习方法之感知机_深度学习_10

三要素分析

模型

输入空间:统计学习方法与实战——统计学习方法之感知机_损失函数_11

输出空间:统计学习方法与实战——统计学习方法之感知机_机器学习_12

决策函数:

策略

确定学习策略就是定义**(经验)**损失函数并将损失函数最小化。

注意这里提到了经验,所以学习是base在训练数据集上的操作

损失函数选择

损失函数的一个自然选择是误分类点的总数,但是,这样的损失函数不是参数统计学习方法与实战——统计学习方法之感知机_感知机_14的连续可导函数,不易优化

损失函数的另一个选择是误分类点到超平面统计学习方法与实战——统计学习方法之感知机_机器学习_15的总距离,这是感知机所采用的

感知机学习的经验风险函数(损失函数)
统计学习方法与实战——统计学习方法之感知机_损失函数_16
其中统计学习方法与实战——统计学习方法之感知机_深度学习_17是误分类点的集合

给定训练数据集统计学习方法与实战——统计学习方法之感知机_深度学习_18,损失函数统计学习方法与实战——统计学习方法之感知机_机器学习_19统计学习方法与实战——统计学习方法之感知机_损失函数_20统计学习方法与实战——统计学习方法之感知机_深度学习_21的连续可导函数

算法

原始形式

输入:统计学习方法与实战——统计学习方法之感知机_深度学习_22
统计学习方法与实战——统计学习方法之感知机_损失函数_23

输出:

  1. 选取初值统计学习方法与实战——统计学习方法之感知机_深度学习_25
  2. 训练集中选取数据统计学习方法与实战——统计学习方法之感知机_算法_26
  3. 如果统计学习方法与实战——统计学习方法之感知机_深度学习_27
    统计学习方法与实战——统计学习方法之感知机_机器学习_28
    统计学习方法与实战——统计学习方法之感知机_损失函数_29
  4. 转至(2),直至训练集中没有误分类点

注意这个原始形式中的迭代公式,可以对统计学习方法与实战——统计学习方法之感知机_算法_30补1,将统计学习方法与实战——统计学习方法之感知机_损失函数_20统计学习方法与实战——统计学习方法之感知机_深度学习_21合并在一起,合在一起的这个叫做扩充权重向量,书上有提到。

对偶形式

对偶形式的基本思想是将统计学习方法与实战——统计学习方法之感知机_损失函数_20统计学习方法与实战——统计学习方法之感知机_深度学习_21表示为实例统计学习方法与实战——统计学习方法之感知机_算法_35和标记统计学习方法与实战——统计学习方法之感知机_感知机_36的线性组合的形式,通过求解其系数而求得统计学习方法与实战——统计学习方法之感知机_损失函数_20统计学习方法与实战——统计学习方法之感知机_深度学习_21
算法流程:

输入:统计学习方法与实战——统计学习方法之感知机_深度学习_22
统计学习方法与实战——统计学习方法之感知机_损失函数_23

输出:
统计学习方法与实战——统计学习方法之感知机_感知机_41

  1. 统计学习方法与实战——统计学习方法之感知机_算法_42
  2. 训练集中选取数据统计学习方法与实战——统计学习方法之感知机_算法_26
  3. 如果统计学习方法与实战——统计学习方法之感知机_算法_44

KaTeX parse error: Undefined control sequence: \nonumber at position 35: … \alpha_i+\eta \̲n̲o̲n̲u̲m̲b̲e̲r̲\\ b\leftarrow …

  1. 转至(2),直至训练集中没有误分类点

Gram matrix

对偶形式中,训练实例仅以内积的形式出现。

为了方便可预先将训练集中的实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram矩阵

统计学习方法与实战——统计学习方法之感知机_感知机_45

相关问题

题中问考虑损失函数最值的时候,不会有影响么?

  1. 感知机处理线性可分数据集,二分类,统计学习方法与实战——统计学习方法之感知机_机器学习_46,所以涉及到的乘以统计学习方法与实战——统计学习方法之感知机_感知机_47
  2. 损失函数 统计学习方法与实战——统计学习方法之感知机_机器学习_48,其中 统计学习方法与实战——统计学习方法之感知机_深度学习_49 是错分的点集合,线性可分的数据集肯定能找到超平面 统计学习方法与实战——统计学习方法之感知机_损失函数_50, 所以这个损失函数最值是0。
  3. 如果正确分类, 统计学习方法与实战——统计学习方法之感知机_算法_51
  4. 统计学习方法与实战——统计学习方法之感知机_算法_52 用来归一化超平面法向量,得到几何间隔,也就是点到超平面的距离, 函数间隔和几何间隔的差异在于同一个超平面 统计学习方法与实战——统计学习方法之感知机_损失函数_53 参数等比例放大成 统计学习方法与实战——统计学习方法之感知机_深度学习_54
  5. 具体算法实现的时候, 统计学习方法与实战——统计学习方法之感知机_深度学习_55要初始化,然后每次迭代针对错分点进行调整,既然要初始化,那如果初始化个 统计学习方法与实战——统计学习方法之感知机_感知机_56 的情况也就不用纠结了,和不考虑 统计学习方法与实战——统计学习方法之感知机_算法_52
  6. 针对错分点是这么调整的
    统计学习方法与实战——统计学习方法之感知机_感知机_58
    前面说了 统计学习方法与实战——统计学习方法之感知机_感知机_59 就是个符号,那么感知机就可以解释为针对误分类点,通过调整 统计学习方法与实战——统计学习方法之感知机_感知机_14
  7. 感知机的解不唯一,和初值有关系,和误分类点调整顺序也有关系;
  8. 这么调整就能找到感知机的解?能,Novikoff还证明了,通过有限次搜索能找到将训练数据完全正确分开的分离超平面。

例子

iris数据集分类实战

数据集查看

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# load data
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = [
'sepal length', 'sepal width', 'petal length', 'petal width', 'label'
]
df.label.value_counts()
plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')
plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
  • 数据集显示
data = np.array(df.iloc[:100, [0, 1, -1]])
X, y = data[:,:-1], data[:,-1]
y = np.array([1 if i == 1 else -1 for i in y])
# 数据线性可分,二分类数据
# 此处为一元一次线性方程
class Model:
def __init__(self):
self.w = np.ones(len(data[0]) - 1, dtype=np.float32)
self.b = 0
self.l_rate = 0.1
# self.data = data

def sign(self, x, w, b):
y = np.dot(x, w) + b
return y

# 随机梯度下降法
def fit(self, X_train, y_train):
is_wrong = False
while not is_wrong:
wrong_count = 0
for d in range(len(X_train)):
X = X_train[d]
y = y_train[d]
if y * self.sign(X, self.w, self.b) <= 0:
self.w = self.w + self.l_rate * np.dot(y, X)
self.b = self.b + self.l_rate * y
wrong_count += 1
if wrong_count == 0:
is_wrong = True
return 'Perceptron Model!'
perceptron = Model()
perceptron.fit(X, y)

x_points = np.linspace(4, 7, 10)
y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]
plt.plot(x_points, y_)

plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()

显示结果

统计学习方法与实战——统计学习方法之感知机_深度学习_61

sklearn 实战感知机

import sklearn
from sklearn.linear_model import Perceptron
clf = Perceptron(fit_intercept=True,
max_iter=1000,
shuffle=True)
clf.fit(X, y)
print(clf.coef_)
# 截距 Constants in decision function.
print(clf.intercept_)
# 画布大小
plt.figure(figsize=(10,10))

# 中文标题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('鸢尾花线性数据示例')

plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)
plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')

# 画感知机的线
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_)

# 其他部分
plt.legend() # 显示图例
plt.grid(False) # 不显示网格
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()

统计学习方法与实战——统计学习方法之感知机_机器学习_62

在上图中,有一个位于左下角的蓝点没有被正确分类,这是因为 SKlearn 的 Perceptron 实例中有一个tol参数。

tol 参数规定了如果本次迭代的损失和上次迭代的损失之差小于一个特定值时,停止迭代。所以我们需要设置 tol=None 使之可以继续迭代:

clf = Perceptron(fit_intercept=True, 
max_iter=1000,
tol=None,
shuffle=True)
clf.fit(X, y)

# 画布大小
plt.figure(figsize=(10,10))

# 中文标题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('鸢尾花线性数据示例')

plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)
plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')

# 画感知机的线
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_)

# 其他部分
plt.legend() # 显示图例
plt.grid(False) # 不显示网格
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()

统计学习方法与实战——统计学习方法之感知机_机器学习_63

习题解答

习题2.1

Minsky 与 Papert 指出:感知机因为是线性模型,所以不能表示复杂的函数,如异或 (XOR)。验证感知机为什么不能表示异或。

  1. 列出异或函数(XOR)的输入和输出;
  2. 使用图例法证明异或问题是线性不可分的;
  3. 使用反证法证明感知机无法表示异或。

解题步骤

异或函数(XOR)的输入和输出
对于异或函数(XOR),全部的输入与对应的输出如下:
统计学习方法与实战——统计学习方法之感知机_损失函数_64

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 使用Dataframe表示异或的输入与输出数据
x1 = [0, 0, 1, 1]
x2 = [0, 1, 0, 1]
y = [-1, 1, 1, -1]
x1 = np.array(x1)
x2 = np.array(x2)
y = np.array(y)
data = np.c_[x1, x2, y]
data = pd.DataFrame(data, index=None, columns=['x1', 'x2', 'y'])
data.head()
# 获取正类别(y=1)的数据
positive = data.loc[data['y'] == 1]
# 获取负类别(y=-1)的数据
negative = data.loc[data['y'] == -1]

# 绘制数据图
# 绘制坐标轴
plt.xlim(-0.5, 1.5)
plt.ylim(-0.5, 1.5)
plt.xticks([-0.5, 0, 1, 1.5])
plt.yticks([-0.5, 0, 1, 1.5])
# 添加坐标轴文字
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制正、负样本点
plt.plot(positive['x1'], positive['x2'], "ro")
plt.plot(negative['x1'], negative['x2'], "bx")
# 添加图示
plt.legend(['Positive', 'Negative'])
plt.show()

统计学习方法与实战——统计学习方法之感知机_感知机_65


 从上图可以看出,无法使用一条直线将两类样本分开,所以异或问题是线性不可分的


 下一步,使用感知机模型进行测试w,b

from sklearn.linear_model import Perceptron
import numpy as np

# 构造异或问题的训练数据集
X_train = np.array([[1, 1], [1, 0], [0, 1], [0, 0]])
y = np.array([-1, 1, 1, -1])

# 使用sklearn的Perceptron类构建感知机模型
perceptron_model = Perceptron()
# 进行模型训练
perceptron_model.fit(X_train, y)

# 打印模型参数
print("感知机模型的参数:w=", perceptron_model.coef_[
0], "b=", perceptron_model.intercept_[0])
感知机模型的参数:w= [0. 0.] b= 0.0

反证法

统计学习方法与实战——统计学习方法之感知机_算法_66
统计学习方法与实战——统计学习方法之感知机_损失函数_67

假设咸知机模型可以表示异或问题,即满足异或函数(XOR)输入与输出的情况(见第 统计学习方法与实战——统计学习方法之感知机_深度学习_68 )。假设 统计学习方法与实战——统计学习方法之感知机_算法_30 向量只有两个维度 统计学习方法与实战——统计学习方法之感知机_损失函数_70

  1. 根据 统计学习方法与实战——统计学习方法之感知机_机器学习_71 ,则 统计学习方法与实战——统计学习方法之感知机_算法_72 ,可得 统计学习方法与实战——统计学习方法之感知机_感知机_73
  2. 根据 统计学习方法与实战——统计学习方法之感知机_算法_74 ,则 统计学习方法与实战——统计学习方法之感知机_损失函数_75 ,结合 统计学习方法与实战——统计学习方法之感知机_感知机_73 ,可得 统计学习方法与实战——统计学习方法之感知机_损失函数_77;
  3. 根据 统计学习方法与实战——统计学习方法之感知机_感知机_78, 则 统计学习方法与实战——统计学习方法之感知机_机器学习_79 ,结合 统计学习方法与实战——统计学习方法之感知机_感知机_73 ,可得 统计学习方法与实战——统计学习方法之感知机_损失函数_81;
  4. 根据 统计学习方法与实战——统计学习方法之感知机_损失函数_82 ,并结合 统计学习方法与实战——统计学习方法之感知机_算法_83 ,则 统计学习方法与实战——统计学习方法之感知机_机器学习_84 ,可得 统计学习方法与实战——统计学习方法之感知机_机器学习_85 ,与异或条件中的 统计学习方法与实战——统计学习方法之感知机_感知机_86
  5. 所以假设不成立,原命题成立,即感知机模型不能表示异或。

习题2.2

解题步骤在上面的iris数据中已经体现。

import numpy as np
from matplotlib import pyplot as plt
%matplotlib tk


class Perceptron:
def __init__(self, X, Y, lr=0.001, plot=True):
"""
初始化感知机
:param X: 特征向量
:param Y: 类别
:param lr: 学习率
:param plot: 是否绘制图形
"""
self.X = X
self.Y = Y
self.lr = lr
self.plot = plot
if plot:
self.__model_plot = self._ModelPlot(self.X, self.Y)
self.__model_plot.open_in()

def fit(self):
# (1)初始化weight, b
weight = np.zeros(self.X.shape[1])
b = 0
# 训练次数
train_counts = 0
# 分类错误标识
mistake_flag = True
while mistake_flag:
# 开始前,将mistake_flag设置为False,用于判断本次循环是否有分类错误
mistake_flag = False
# (2)从训练集中选取x,y
for index in range(self.X.shape[0]):
if self.plot:
self.__model_plot.plot(weight, b, train_counts)
# 损失函数
loss = self.Y[index] * (weight @ self.X[index] + b)
# (3)如果损失函数小于0,则该点是误分类点
if loss <= 0:
# 更新weight, b
weight += self.lr * self.Y[index] * self.X[index]
b += self.lr * self.Y[index]
# 训练次数加1
train_counts += 1
print("Epoch {}, weight = {}, b = {}, formula: {}".format(
train_counts, weight, b, self.__model_plot.formula(weight, b)))
# 本次循环有误分类点(即分类错误),置为True
mistake_flag = True
break
if self.plot:
self.__model_plot.close()
# (4)直至训练集中没有误分类点
return weight, b

class _ModelPlot:
def __init__(self, X, Y):
self.X = X
self.Y = Y

@staticmethod
def open_in():
# 打开交互模式,用于展示动态交互图
plt.ion()

@staticmethod
def close():
# 关闭交互模式,并显示最终的图形
plt.ioff()
plt.show()

def plot(self, weight, b, epoch):
plt.cla()
# x轴表示x1
plt.xlim(0, np.max(self.X.T[0]) + 1)
# y轴表示x2
plt.ylim(0, np.max(self.X.T[1]) + 1)
# 画出散点图,并添加图示
scatter = plt.scatter(self.X.T[0], self.X.T[1], c=self.Y)
plt.legend(*scatter.legend_elements())
if True in list(weight == 0):
plt.plot(0, 0)
else:
x1 = -b / weight[0]
x2 = -b / weight[1]
# 画出分离超平面
plt.plot([x1, 0], [0, x2])
# 绘制公式
text = self.formula(weight, b)
plt.text(0.3, x2 - 0.1, text)
plt.title('Epoch %d' % epoch)
plt.pause(0.01)

@staticmethod
def formula(weight, b):
text = 'x1 ' if weight[0] == 1 else '%d*x1 ' % weight[0]
text += '+ x2 ' if weight[1] == 1 else (
'+ %d*x2 ' % weight[1] if weight[1] > 0 else '- %d*x2 ' % -weight[1])
text += '= 0' if b == 0 else ('+ %d = 0' %
b if b > 0 else '- %d = 0' % -b)
return text
X = np.array([[3, 3], [4, 3], [1, 1]])
Y = np.array([1, 1, -1])
model = Perceptron(X, Y, lr=1)
weight, b = model.fit()

统计学习方法与实战——统计学习方法之感知机_深度学习_87

习题2.3

证明以下定理:样本集线性可分的充分必要条件是正实例点所构成的凸壳与负实例点所构成的凸壳互不相交。

  1. 写出凸壳和线性可分的定义
  2. 证明必要性:线性可分\Rightarrow⇒凸壳不相交
  3. 证明充分性:凸壳不相交\Rightarrow⇒线性可分

凸壳

设集合 统计学习方法与实战——统计学习方法之感知机_算法_88 ,是由 统计学习方法与实战——统计学习方法之感知机_算法_89 中的 统计学习方法与实战——统计学习方法之感知机_深度学习_90 个点所组成的集合,即 统计学习方法与实战——统计学习方法之感知机_深度学习_91 。定义 统计学习方法与实战——统计学习方法之感知机_算法_92 的凸壳 统计学习方法与实战——统计学习方法之感知机_算法_93 为:
统计学习方法与实战——统计学习方法之感知机_机器学习_94

线性可分

给定一个数据集
统计学习方法与实战——统计学习方法之感知机_深度学习_95
其中 统计学习方法与实战——统计学习方法之感知机_算法_96 ,如果存在某个超平面 统计学习方法与实战——统计学习方法之感知机_算法_92
统计学习方法与实战——统计学习方法之感知机_感知机_98
能够将数据集的正实例点和负实例点完全正确划分到超平面的两侧,即对所有 统计学习方法与实战——统计学习方法之感知机_深度学习_99 的实例 统计学习方法与实战——统计学习方法之感知机_感知机_100 ,有 统计学习方法与实战——统计学习方法之感知机_深度学习_101 ,对 统计学习方法与实战——统计学习方法之感知机_算法_102 的实例 统计学习方法与实战——统计学习方法之感知机_感知机_100 ,有 统计学习方法与实战——统计学习方法之感知机_深度学习_104 ,则称数据集 统计学习方法与实战——统计学习方法之感知机_深度学习_18 为线性可分 数据集,否则称数据集 统计学习方法与实战——统计学习方法之感知机_深度学习_18

线性可分证明凸壳不相交

证明思路(反证法):

假设原命题不成立:样本集线性可分,正实例点所构成的凸壳与负实例点所构成的凸壳相交
条件推理
发现矛盾,得出原命题成立

  1. 假设原命题不成立:
    设数据集 统计学习方法与实战——统计学习方法之感知机_机器学习_107 中的正例点集为 统计学习方法与实战——统计学习方法之感知机_深度学习_108的凸壳为 统计学习方法与实战——统计学习方法之感知机_深度学习_109,负实例点集为 统计学习方法与实战——统计学习方法之感知机_感知机_110的凸壳为 统计学习方法与实战——统计学习方法之感知机_机器学习_111
    假设样本集线性可分,正实例点所构成的凸壳与负实例点所构成的凸壳相交,即存在某个元素 统计学习方法与实战——统计学习方法之感知机_感知机_112 ,同时满足 统计学习方法与实战——统计学习方法之感知机_深度学习_113统计学习方法与实战——统计学习方法之感知机_深度学习_114
  2. 条件推理:
    若数据集 统计学习方法与实战——统计学习方法之感知机_机器学习_107 是线性可分的,根据线性可分的定义,则存在一个超平面能够将 统计学习方法与实战——统计学习方法之感知机_机器学习_116统计学习方法与实战——统计学习方法之感知机_损失函数_117完全分离:
    统计学习方法与实战——统计学习方法之感知机_感知机_118
    对于所有的正例点 统计学习方法与实战——统计学习方法之感知机_深度学习_119 ,有
    统计学习方法与实战——统计学习方法之感知机_算法_120
    根据凸壳的定义,对于 统计学习方法与实战——统计学习方法之感知机_深度学习_109中的元素 统计学习方法与实战——统计学习方法之感知机_深度学习_122,有
    统计学习方法与实战——统计学习方法之感知机_损失函数_123
    因此 统计学习方法与实战——统计学习方法之感知机_深度学习_124
    同理对于 统计学习方法与实战——统计学习方法之感知机_损失函数_117中的元素 统计学习方法与实战——统计学习方法之感知机_损失函数_126,有 统计学习方法与实战——统计学习方法之感知机_深度学习_127
  3. 找出矛盾,得出原命题成立:
    根据条件推理,当 统计学习方法与实战——统计学习方法之感知机_深度学习_113统计学习方法与实战——统计学习方法之感知机_机器学习_129 ,当 统计学习方法与实战——统计学习方法之感知机_深度学习_114统计学习方法与实战——统计学习方法之感知机_深度学习_131 ,既 统计学习方法与实战——统计学习方法之感知机_感知机_112 不可能同时满足若 统计学习方法与实战——统计学习方法之感知机_深度学习_113统计学习方法与实战——统计学习方法之感知机_深度学习_114,这与假设命题 矛盾。
    因此,原命题成立,当样本线性可分时, 统计学习方法与实战——统计学习方法之感知机_深度学习_109统计学习方法与实战——统计学习方法之感知机_机器学习_111必不相交。必要性得证。

证明充分性:凸壳不相交\Rightarrow⇒线性可分

证明思路:

根据凸壳不相交,找到一个超平面
证明这个超平面可将两个互不相交的凸壳分隔开(反证法)
上述超平面可以将凸壳分隔开,则样本集满足线性可分

证明步骤

  1. 根据凸壳不相交,找到一个超平面:
    设数据集 统计学习方法与实战——统计学习方法之感知机_机器学习_107 中的正例点集为 统计学习方法与实战——统计学习方法之感知机_深度学习_108的凸壳为 统计学习方法与实战——统计学习方法之感知机_深度学习_109,负实例点集为 统计学习方法与实战——统计学习方法之感知机_感知机_110的凸壳为 统计学习方法与实战——统计学习方法之感知机_机器学习_111,且conv 统计学习方法与实战——统计学习方法之感知机_损失函数_142统计学习方法与实战——统计学习方法之感知机_机器学习_111不相交。
    定义两个点 统计学习方法与实战——统计学习方法之感知机_算法_144 的距离为
    统计学习方法与实战——统计学习方法之感知机_机器学习_145
    定义 统计学习方法与实战——统计学习方法之感知机_算法_146的距离是,分别处于两个凸壳集合中的点的距离最小值:
    统计学习方法与实战——统计学习方法之感知机_机器学习_147
    记最小值点分别为 统计学习方法与实战——统计学习方法之感知机_感知机_148, 即:
    统计学习方法与实战——统计学习方法之感知机_深度学习_149
    定义以 统计学习方法与实战——统计学习方法之感知机_算法_150为法线,且过两点中点的超平面为 统计学习方法与实战——统计学习方法之感知机_损失函数_151, 则参数为:
    统计学习方法与实战——统计学习方法之感知机_深度学习_152
  2. 证明这个超平面可将两个互不相交的凸壳分隔开 (反证法)
    若某个超平面可将两个互不相交的凸壳分隔开,则 统计学习方法与实战——统计学习方法之感知机_机器学习_153统计学习方法与实战——统计学习方法之感知机_损失函数_154
    统计学习方法与实战——统计学习方法之感知机_机器学习_155
    假设原命题不成立:当 统计学习方法与实战——统计学习方法之感知机_机器学习_156时,假设 统计学习方法与实战——统计学习方法之感知机_算法_157 ,则有:
    统计学习方法与实战——统计学习方法之感知机_算法_158
    设点 统计学习方法与实战——统计学习方法之感知机_感知机_159 ,即 统计学习方法与实战——统计学习方法之感知机_算法_160统计学习方法与实战——统计学习方法之感知机_感知机_161统计学习方法与实战——统计学习方法之感知机_机器学习 的线段上。根据凸壳定义, 统计学习方法与实战——统计学习方法之感知机_机器学习_163。则 统计学习方法与实战——统计学习方法之感知机_算法_160统计学习方法与实战——统计学习方法之感知机_深度学习_165距离的平方为:
    统计学习方法与实战——统计学习方法之感知机_损失函数_166

求解 统计学习方法与实战——统计学习方法之感知机_损失函数_167统计学习方法与实战——统计学习方法之感知机_机器学习_168距离的最小值, 对上式求导:
统计学习方法与实战——统计学习方法之感知机_感知机_169
根据假设,在 统计学习方法与实战——统计学习方法之感知机_机器学习_170 时,得 统计学习方法与实战——统计学习方法之感知机_算法_171 。在当 统计学习方法与实战——统计学习方法之感知机_深度学习_172 足够接近于 0 时 (导函数在 0 处的极限值为负,则存在邻域函数递减),即 统计学习方法与实战——统计学习方法之感知机_深度学习_173
统计学习方法与实战——统计学习方法之感知机_深度学习_174 存在一点 统计学习方法与实战——统计学习方法之感知机_损失函数_167 ,使得它到 统计学习方法与实战——统计学习方法之感知机_机器学习_168的距离,比定义的凸壳距离 统计学习方法与实战——统计学习方法之感知机_机器学习_177还小。产生矛盾。
故原命题成立,即 统计学习方法与实战——统计学习方法之感知机_算法_178。同理,可证 统计学习方法与实战——统计学习方法之感知机_深度学习_179。则可以找到一个超平面将两个互不相交的凸壳分隔开。
3. 上述超平面可以将凸壳分隔开,则样本集满足线性可分
根据凸壳定义,数据集 统计学习方法与实战——统计学习方法之感知机_深度学习_18 中正例点 统计学习方法与实战——统计学习方法之感知机_机器学习_181 负例点 统计学习方法与实战——统计学习方法之感知机_损失函数_182。上述超平面可以将正例点集 统计学习方法与实战——统计学习方法之感知机_算法_183和负例点集 统计学习方法与实战——统计学习方法之感知机_算法_184两个凸壳分隔开,则可以使样本集线性可分。充分性得证。

链接: ​​DataWhale​​.


标签:plt,self,学习,感知机,超平面,凸壳,data,统计
From: https://blog.51cto.com/u_13859040/5814506

相关文章

  • 统计学习与方法实战——统计学习方法概论
    统计学习方法概论题​​统计学习方法概论​​​​实现统计学习方法的步骤​​​​统计学习方法三要素​​​​模型​​​​策略​​​​损失函数与风险函数​​​​定义​​......
  • 机器学习从入门到精通—— Logistic回归与最大熵模型
    Logistic回归​​Logistic回归​​​​逻辑斯谛​​​​回归模型​​​​相对应模型代码实现​​​​逻辑斯蒂​​​​最大熵模型代码实现​​Logistic回归逻辑斯谛1.逻辑斯......
  • 常系数齐次线性递推学习笔记
    写在前面的话碍于笔者水平有限,本文缺陷可能比较多,欢迎指正。前置知识:NTT。模板\(\text{Link}\)给定\(f_1,f_2,f_3\dotsf_k\)和\(a_0,a_1,a_2\dotsa_{k-1}\),求\[......
  • Anderson-Darling 统计检验
    功能:对于特定数据集和分布,分布与数据拟合越好,此统计量越小。可以用Anderson-Darling统计量确定数据是否符合t检验的正态假设。  help: ......
  • 动态规划学习入门(小白零基础)
    动态规划学习入门(小白零基础)基础概念如果某一问题可拆解成若干重叠子问题,即可用动态规划解决。重叠子问题:比如斐波那契数列F(n)可分解成F(n-1)+F(n-2),而F(n-1)又可......
  • 学习笔记——动态 dp
    前言好消息,CSP-St4出DDP,并且有的人场上为了调T3的假算没写。。。概述其实是个挺简单的东西,就是如果一道题可以通过dp轻松解决,但是题目加上了每次询问修改一些信......
  • C语言学习:结构
    structnamect{charfmame[LEN];charlname[LEN];intletter;};全局创建结构,注意末尾有分号在main函数内创建结构1.1structnamect{charfma......
  • Spring学习
    1、Spring1.1、简介2002年,首次推出了Spring雏形:interface21框架;2004年3月24日发布了1.0版本RodJohnson,SpringFramework创始人,著名作者,悉尼大学博士,音乐学专业。Sp......
  • HCIA学习笔记三十九:DHCP全局地址池配置
    一、DHCP全局地址池配置•配置基于全局地址池的DHCP服务器,从所有接口上线的用户都可以从该全局地址池中获取IP地址等配置信息。二、DHCP全局地址池配置实验2.1、拓扑......
  • 拓端tecdat|R语言代写深度学习和德国数据科学就业市场
    看看就业市场中深度学习/人工智能趋势如何广泛流行。 我从网站上挖掘了可用的职位空缺数量:Monster,Stepstone和Indeed正在搜索术语“数据科学家”。为了把这些数字看得很清......