3 篇文章 0 订阅

# 第五章 分类：其他技术

## 5.1 基于规则的分类

r i : ( 条 件 ) − > y i r_i:(条件)->y_i

C o v e r a g e ( r ) = ∣ A ∣ ∣ D ∣ A c c u r a c y ( r ) = ∣ A ∩ y ∣ ∣ A ∣ Coverage(r)=\frac{|A|}{|D|} {}\\ {}\\ Accuracy(r)=\frac{|A \cap y|}{|A|}

• 互斥规则
• 穷举规则
• 有序规则
• 无序规则

C4.5 ，RIPPER

## 5.2 最近邻算法（KNN）

### 无监督最近邻

from sklearn.neighbors import NearestNeighbors
import numpy as np

X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) # 构建数组
# 分类器初始化
nbrs = NearestNeighbors(n_neighbors=2,algorithm='ball_tree')
# 训练数据
nbrs.fit(X)
# 返回训练结果
distances,indices=nbrs.kneighbors(X)

>>>indices # 对应位置上点所对应分的类，通过聚类样本一共分为了5类，indices按照索引顺序输出类别。
array([[0, 1],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4]], dtype=int64)

>>>distances #
array([[0.        , 1.        ],
[0.        , 1.        ],
[0.        , 1.41421356],
[0.        , 1.        ],
[0.        , 1.        ],
[0.        , 1.41421356]])

>>>nbrs.kneighbors_graph(X).toarray() # 通过稀疏点描述各个点之间的距离
array([[1., 1., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0.],
[0., 1., 1., 0., 0., 0.],
[0., 0., 0., 1., 1., 0.],
[0., 0., 0., 1., 1., 0.],
[0., 0., 0., 0., 1., 1.]])


### KDTree和BallTree类

from sklearn.neighbors import KDTree
X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
kdt = KDTree(X,leaf_size=30,metric='euclidean')
kdt.query(X,k=2,return_distance=False)
array([[0, 1],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4]], dtype=int64)



### 最邻近算法分类

• 一种是基于K(个数）:KNeighborsClassifier，

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import neighbors,datasets
%matplotlib inline
n_neighbors = 15

# 方便计算，只使用鸢尾花的两个特征
X = iris.data[:,:2]
y = iris.target

h = .02  # step size in the mesh

# create color maps
cmap_light = ListedColormap(['orange','cyan','cornflowerblue'])
cmap_bold = ListedColormap(['darkorange','c','darkblue'])

for weights in ['uniform','distance']:
# we create an instace of Neighbours Classifier and fit the data.
clf = neighbors.KNeighborsClassifier(n_neighbors,weights=weights)
clf.fit(X,y)

# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min,x_max]x[y_min,y_max]
x_min,x_max = X[:,0].min() - 1,X[:,0].max()+1
y_min,y_max = X[:,1].min() - 1,X[:,1].max()+1
xx,yy = np.meshgrid(np.arange(x_min,x_max,h),
np.arange(y_min,y_max,h))
Z = clf.predict(np.c_[xx.ravel(),yy.ravel()])

# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)

# Plot also the training points
plt.scatter(X[:,0],X[:,1],c=y,cmap=cmap_bold
,edgecolor = 'k',s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("3-Class classification(k=%i,weights='%s')"%(n_neighbors,weights))
plt.show()


### 最近邻回归

SKlearn有两种不同的最近邻回归:

• 基于K: KNeighborsRegressor

weights:参数

• 1.uniform : 默认所有的点具有一样的权重
• 2.distance: 权重和距离之间呈反比

import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors
%matplotlib inline
np.random.seed(0)
X = np.sort(5*np.random.rand(40,1),axis=0)
T = np.linspace(0,5,500)[:,np.newaxis]
y = np.sin(X).ravel()

y[::5] += 1*(0.5 - np.random.rand(8))

# create model
n_neighbors = 5

for i,weights in enumerate(['uniform','distance']):
knn = neighbors.KNeighborsRegressor(n_neighbors,weights=weights)
y_ = knn.fit(X,y).predict(T)

plt.subplot(2,1,i+1)
plt.scatter(X,y,color='darkorange',label='data')
plt.plot(T,y_,color='navy',label='prediction')
plt.axis('tight')
plt.legend()
plt.title("KNeighborsRegressor(k = %i,weights = %s)"%(n_neighbors,weights))

plt.tight_layout()
plt.show()


import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import fetch_olivetti_faces
from sklearn.utils.validation import check_random_state

from sklearn.ensemble import ExtraTreesRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import RidgeCV
%matplotlib inline
Tdata= fetch_olivetti_faces()
data = Tdata.data
target = Tdata.target

train = data[target < 30]
test = data[target >= 30] # Test on indepent people

# Test on a subset of people
n_faces = 5
rng = check_random_state(4)
face_ids = rng.randint(test.shape[0],size=(n_faces,))
test = test[face_ids,:]

n_pixels = data.shape[1]
# Upper half of the faces
X_train = train[:,:(n_pixels+1)//2]
#Lower half of the faces
y_train = train[:,n_pixels//2:]
X_test = test[:,:(n_pixels + 1)//2]
y_test = test[:,n_pixels//2:]

# Fit estimators
ESTIMATORS={
"Extra trees" : ExtraTreesRegressor(n_estimators=10,max_features=32,random_state=0)
,"K-nn":KNeighborsRegressor()
,"Linear regression":LinearRegression()
,"Ridge":RidgeCV()
}

y_test_predict = dict()
for name,estimator in ESTIMATORS.items():
estimator.fit(X_train,y_train)
y_test_predict[name]=estimator.predict(X_test)

# Plot the completed faces
image_shape = (64,64)

n_cols = 1+len(ESTIMATORS)
plt.figure(figsize = (2. * n_cols, 2.26 * n_faces))
plt.suptitle("Face completion with multi-output estimators",size=16)

for i in range(n_faces):
true_face = np.hstack((X_test[i],y_test[i]))

if i :
sub = plt.subplot(n_faces,n_cols,i*n_cols+1)
else:
sub = plt.subplot(n_faces,n_cols,i*n_cols+1,
title = "true faces")
sub.axis("off")
sub.imshow(true_face.reshape(image_shape)
,cmap=plt.cm.gray
,interpolation="nearest")
for j,est in enumerate(sorted(ESTIMATORS)):
completed_face = np.hstack((X_test[i],y_test_predict[est][i]))

if i :
sub = plt.subplot(n_faces,n_cols,i*n_cols+2+j)
else:
sub = plt.subplot(n_faces,n_cols,i*n_cols+2+j
,title=est)
sub.axis("off")
sub.imshow(completed_face.reshape(image_shape)
,cmap=plt.cm.gray
,interpolation="nearest")
plt.show()


## 5.3贝叶斯分类器

### 5.3.1 贝叶斯定理

P ( X , Y ) = P ( Y ∣ X ) × P ( X ) = P ( X ∣ Y ) × P ( Y ) P(X,Y)=P(Y|X) \times P(X) = P(X|Y) \times P(Y)

P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P(Y|X)= \frac{P(X|Y)P(Y)}{P(X)}

### 5.3.2 贝叶斯定理在分类中的应用

• 案例 5.3.1
Tid有房婚姻状况年收入拖欠贷款
1单身125K
2已婚100K
3单身70K
4已婚120K
5离异95k
6已婚60K
7离异220k
8单身85k
9已婚75K
10单身90k

P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)}

### 5.3.3 朴素贝叶斯分类器

P ( X ∣ Y = y ) = ∏ i = 1 d P ( X i ∣ Y = y ) P(X|Y=y)=\prod_{i=1}^{d}P(X_i|Y=y)
1.朴素贝叶斯的工作原理

P ( Y ∣ X ) = P ( Y ) ∏ i = 1 d P ( X i ∣ Y ) p ( X ) P(Y|X)=\frac{P(Y)\prod_{i=1}^dP(X_i|Y)}{p(X)}

2.估计连续属性的条件概率

（1）将连续数据离散化，将连续数据转换为序数据

（2）可以假设连续变量服从某种概率分布，然后使用训练数据估计分布的参数。高斯分布是常被用来表示连续属性的类条件概率分布，该分布有两个参数，均值 μ \mu 和方差%\sigma^2 . 对 每 个 类 .对每个类 y_j , 属 性 ,属性 X_i$的条件概率等于： P ( X i = x i ∣ Y = y j ) = 1 2 π σ i j e ( x i − μ o ) 2 2 σ i j 2 P(X_i=x_i|Y=y_j)=\frac{1}{\sqrt{2\pi \sigma_{ij}}}e^{\frac{(x_i - \mu_o)^2}{2\sigma_{ij}^2}} 参数 μ i j \mu_{ij} ,可以用所有训练记录关于 X i X_i 的样本均值 ( ( ˉ x ) ) (\bar(x)) 来估计，同理，参数 σ i j 2 \sigma_{ij}^2 可以用这些训练记录的样本方差 s 2 s^2 来估计。 • 关于上述案例： 关于上述属性关于NO的样本均值和方差： x ˉ = 125 + 100 + 70 + . . . + 75 7 s 2 = ( 125 − 110 ) 2 + ( 100 − 110 ) 2 + . . . + ( 75 − 110 ) 2 7 = 2975 s = 2975 = 54.54 \bar{x}=\frac{125+100+70+...+75 }{7}\\ {}\\ s^2=\frac{(125-110)^2+(100-110)^2+...+(75-110)^2}{7}=2975\\ {}\\ s=\sqrt{2975}=54.54 对于上述案例，应征税的收入等于120k美元，其类条件概率为： P ( 收 入 =$ 120 k ∣ N o ) = 1 2 π ( 54.54 ) e − 120 − 110 2 × 2975 = 0.0072 P(收入=\$120k|No)=\frac{1}{\sqrt{2\pi}(54.54)}e^{-\frac{120-110}{2 \times 2975}}=0.0072 但是上述条件概率的解释存在一定的误导性。上述公式为一个连续的概率密度函数，当一个连续属性中取一个点的概率应该为0，在连续属性中，概率我们取一个点的小区间. P ( x i ⩽ X i ⩽ x i + ϵ ∣ Y = y j ) = ∫ x i x i + ϵ f ( X i ; μ i j , σ i j ) d X i ≈ f ( X i ; μ i j , σ i j ) × ϵ P(x_i \leqslant X_i \leqslant x_i +\epsilon|Y=y_j)=\int_{x_i}^{x_i + \epsilon}f(X_i;\mu_{ij},\sigma_{ij})dX_i \approx f(X_i;\mu_{ij},\sigma_{ij}) \times \epsilon 由于 ϵ \epsilon 是每个类的一个常量乘法因子，在对后验概率P(Y|X)进行规范化的时候就抵消掉了。因此，还可以这样来表示。 3.朴素贝叶斯分类器举例 • 案例 Tid有房婚姻状况年收入拖欠贷款 1单身125K 2已婚100K 3单身70K 4已婚120K 5离异95k 6已婚60K 7离异220k 8单身85k 9已婚75K 10单身90k 条件概率 P ( 有 房 = 是 ∥ N o ) = 3 7 P(有房=是\|No)=3 \over 7 P ( 有 房 = 否 ∥ N o ) = 4 7 P(有房=否\|No)=4 \over 7 P ( 有 房 = 是 ∥ Y e s ) = 0 P(有房=是\|Yes)=0 P ( 有 房 = 否 ∥ Y e s ) = 1 P(有房=否\|Yes)=1 P ( 婚 姻 情 况 = 单 身 ∥ N o ) = 2 7 P(婚姻情况=单身\|No)=2 \over 7 P ( 婚 姻 情 况 = 离 婚 ∥ N o ) = 1 7 P(婚姻情况=离婚\|No)=1 \over 7 P ( 婚 姻 情 况 = 已 婚 ∥ N o ) = 4 7 P(婚姻情况=已婚\|No)=4 \over 7 P ( 婚 姻 情 况 = 单 身 ∥ Y e s ) = 2 3 P(婚姻情况=单身\|Yes)=2 \over 3 P ( 婚 姻 情 况 = 离 婚 ∥ Y e s ) = 1 3 P(婚姻情况=离婚\|Yes)=1 \over 3 P ( 婚 姻 情 况 = 已 婚 ∥ Y e s ) = 0 P(婚姻情况=已婚\|Yes)=0 年收入 如果类=No：样本均值 = 110 样本方差=2957 如果类=Yes：样本均值=90 样本均值=25 现在预测记录X=(有房=否，婚姻状况=已婚，年收入=$120K)的类标号，现在我们只需要计算后验概率P(No|X)和P(Yes|X).

P ( N o ∣ X ) = P ( N o ) ∏ i = 1 d P ( X i ∣ Y ) P ( X ) = P ( N o ) P ( 有 房 = 否 ∣ N o ) P ( 婚 姻 状 况 = 已 婚 ∣ N o ) P ( 年 收 入 = 120 K ∣ N o ) P ( X ) = 0.7 × 4 7 × 4 7 × 0.0072 P ( X ) = 0.0016 α P ( Y e s ∣ X ) = P ( Y e s ) ∏ i = 1 d P ( X i ∣ Y ) P ( X ) = P ( Y e s ) P ( 有 房 = 否 ∣ Y e s ) P ( 婚 姻 状 况 = 已 婚 ∣ Y e s ) P ( 年 收 入 = 120 K ∣ Y e s ) P ( X ) = 0.3 × 1 × 0 × ( 1.2 × 1 0 − 9 ) P ( X ) = 0 \begin{aligned} P(No|X) &= \frac{P(No) \prod_{i=1}^d P(X_i|Y)}{P(X)} \\ &= \frac{ P(No) P(有房=否|No) P(婚姻状况=已婚|No) P(年收入=120K|No)}{P(X)} \\ &= \frac{0.7 \times {4\over7} \times {4\over7} \times 0.0072}{P(X)}=0.0016\alpha \\{} P(Yes|X) &= \frac{P(Yes) \prod_{i=1}^d P(X_i|Y)}{P(X)} \\ &= \frac{ P(Yes) P(有房=否|Yes) P(婚姻状况=已婚|Yes) P(年收入=120K|Yes)}{P(X)} \\ &= \frac{0.3 \times 1 \times 0 \times (1.2 \times 10^{-9})}{P(X)}=0 \end{aligned}

4.条件概率的m估计

P ( x i ∣ y j ) = n c + m p n + m P(x_i|y_j)=\frac{n_c+mp}{n+m}

P ( 婚 姻 状 况 = 已 婚 ∣ Y e s ) = ( 0 + 3 × 1 / 3 ) / ( 3 + 3 ) = 1 / 6 P ( N o ∣ X ) = P ( N o ) ∏ i = 1 d P ( X i ∣ Y ) P ( X ) = P ( N o ) P ( 有 房 = 否 ∣ N o ) P ( 婚 姻 状 况 = 已 婚 ∣ N o ) P ( 年 收 入 = 120 K ∣ N o ) P ( X ) = 0.7 × 6 10 × 6 10 × 0.0072 P ( X ) = 0.0018 α P ( Y e s ∣ X ) = P ( Y e s ) ∏ i = 1 d P ( X i ∣ Y ) P ( X ) = P ( Y e s ) P ( 有 房 = 否 ∣ Y e s ) P ( 婚 姻 状 况 = 已 婚 ∣ Y e s ) P ( 年 收 入 = 120 K ∣ Y e s ) P ( X ) = 0.3 × 4 6 × 1 6 × ( 1.2 × 1 0 − 9 ) P ( X ) = 4.0 × 1 0 − 11 α \begin{aligned} P(婚姻状况&=已婚|Yes)=(0 + 3 \times 1/3)/(3+3)=1/6\\ P(No|X) &= \frac{P(No) \prod_{i=1}^d P(X_i|Y)}{P(X)} \\ &= \frac{ P(No) P(有房=否|No) P(婚姻状况=已婚|No) P(年收入=120K|No)}{P(X)} \\ &= \frac{0.7 \times {6\over10} \times {6\over10} \times 0.0072}{P(X)}=0.0018\alpha \\{} P(Yes|X) &= \frac{P(Yes) \prod_{i=1}^d P(X_i|Y)}{P(X)} \\ &= \frac{ P(Yes) P(有房=否|Yes) P(婚姻状况=已婚|Yes) P(年收入=120K|Yes)}{P(X)} \\ &= \frac{0.3 \times {4 \over 6} \times {1 \over 6} \times (1.2 \times 10^{-9})}{P(X)}=4.0\times 10^{-11} \alpha \end{aligned}

### 5.3.4 贝叶斯误差率

E r r o r = ∫ 0 x ^ P ( 鳄 鱼 ∣ X ) d X + ∫ x ^ ∞ P ( 美 洲 鳄 ∣ X ) d X Error = \int_0^{\hat{x}}P(鳄鱼|X)dX + \int_{\hat{x}}^{\infin}P(美洲鳄|X)dX

### 5.3.5贝叶斯信念网络

1.模型表示

• （1）一个有向无环图（dag），表示变量之间的依赖关系。
• （2）一个概率表，把各节点和它的直接父节点关联起来。

2.建立模型

1：设 T = ( X 1 , X 2 , . . . , X d ) T=(X_1,X_2,...,X_d) 表示变量的全序
2：for j=1 to d do
3: 令 X T ( j ) X_{T(j)} 表示T中第j个次序最高的变量
4: 令 π ( X T ( j ) ) = { X T ( 1 ) , X T ( 2 ) . . . X T ( j − 1 ) } \pi(X_{T(j)})=\{X_{T(1)},X_{T(2)}...X_{T(j-1)}\} 表示排在 X T ( j ) X_{T(j)} 前面的变量的集合
5：从 π ( X T ( j ) ) \pi(X_{T(j)}) 中去掉对 X j X_{j} 没有影响的变量（使用先验知识）
6：在 X T ( j ) X_{T(j)} π ( X T ( j ) ) \pi(X_{T(j)}) 中剩余的变量之间画弧
7：end for

3.举例

P ( H D = Y e s ) = ∑ α ∑ β P ( H D = Y e s ∣ E = α , D = β ) P ( E = α , D = β ) = ∑ α ∑ β P ( H D = Y e s ∣ E = α , D = β ) P ( E = α ) P ( D = β ) = 0.25 × 0.7 × 0.25 + 0.45 × 0.7 × 0.75 + 0.55 × 0.3 × 0.25 + 0.75 × 0.3 × 0.75 = 0.49 \begin{aligned} P(HD=Yes) &= \sum_\alpha \sum_\beta P(HD=Yes|E=\alpha,D=\beta)P(E=\alpha,D=\beta)\\ &= \sum_\alpha \sum_\beta P(HD=Yes|E=\alpha,D=\beta)P(E=\alpha)P(D=\beta)\\ &= 0.25 \times 0.7 \times 0.25 + 0.45 \times 0.7 \times 0.75 + 0.55 \times 0.3 \times0.25 +0.75\times0.3\times0.75\\ &=0.49 \end{aligned}

P ( B P = 高 ) = ∑ γ p ( B P = 高 ∣ H D = γ ) P ( H D = γ ) = 0.85 × 0.49 + 0.2 × 0.51 = 0.5185 其 中 γ ∈ y e s ， N o 。 因 此 ， 此 人 患 有 心 脏 病 的 后 验 概 率 是 ： P ( H D = Y e s ∣ B P = 高 ) = P ( B P = 高 ∣ H D = Y e s ) P ( H D = Y e s ) P ( B P = 高 ) = 0.85 × 0.49 0.5185 = 0.8033 同 理 ， P ( H D = N o ∣ B p = 高 ) = 1 − 0.8033 = 0.1967 \begin{aligned} P(BP=高)&=\sum_{\gamma}p(BP=高|HD=\gamma)P(HD=\gamma)\\ &=0.85\times 0.49 + 0.2 \times 0.51 = 0.5185 \end{aligned} {}\\ 其中\gamma \in {yes，No}。因此，此人患有心脏病的后验概率是：\\ {}\\ \begin{aligned} P(HD=Yes|BP=高)&=\frac{P(BP=高|HD=Yes)P(HD=Yes)}{P(BP=高)} \\ &=\frac{0.85 \times 0.49}{0.5185} = 0.8033 \end{aligned}\\ {}\\ 同理，P(HD=No|Bp=高)=1-0.8033=0.1967

P ( H D = Y e s ∣ B P = 高 ， D = 健 康 ， E = Y e s ) = [ P ( B P = 高 ∣ H D = Y e s ， D = 健 康 ， E = Y e s ) P ( B P = 高 ∣ D = 健 康 , E = Y e s ) ] × P ( H D = Y e s ∣ D = 健 康 ， E = Y e s ) = P ( B P = 高 ∣ H D = Y e s ) P ( H D = Y e s ∣ D = 健 康 ， E = Y e s ) ∑ g a m m a P ( B P = 高 ∣ H D = γ ) P ( H D = γ ∣ D = 健 康 ， E = Y e s ) = 0.85 × 0.25 0.85 × 0.25 + 0.2 × 0.75 = 0.5862 则 此 人 不 换 心 脏 病 的 概 率 是 ： P ( H D = N o ∣ B P = 高 ， D = 健 康 ， E = Y e s ) = 1 − 0.5862 = 0.4138 \begin{aligned} &P(HD=Yes|BP=高，D=健康，E=Yes)\\ &=[\frac{P(BP=高|HD=Yes，D=健康，E=Yes)}{P(BP=高|D=健康,E=Yes)}]\times P(HD=Yes|D=健康，E=Yes)\\ &=\frac{P(BP=高|HD=Yes)P(HD=Yes|D=健康，E=Yes)}{\sum_{gamma}P(BP=高|HD=\gamma)P(HD=\gamma|D=健康，E=Yes)}\\ &=\frac{0.85\times0.25}{0.85\times0.25+0.2\times0.75}\\ &=0.5862 \end{aligned}\\ 则此人不换心脏病的概率是：\\ P(HD=No|BP=高，D=健康，E=Yes)=1-0.5862=0.4138

### 5.3.6 贝叶斯模型代码实现

sklearn中，朴素贝叶斯根据预测 P ( x i ∣ y ) P(x_i|y) 分布时，所作假设不同，有：

• 高斯朴素贝叶斯：GaussianNB()
• 多项式朴素贝叶斯：multinomialNB()
• 伯努利朴素贝叶斯：BernoulliNB()
• 补充朴素贝叶斯: ComplementNB()
from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

Xtrain,Xtest,Ytrain,Ytest = train_test_split(iris.data,iris.target,test_size=0.3)

gnb = GaussianNB()
gnb.fit(Xtrain,Ytrain)
scores = gnb.score(Xtest,Ytest)
print(scores)

y_pred = gnb.predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d"% (iris.data.shape[0],(iris.target != y_pred).sum()))


0.9111111111111111
Number of mislabeled points out of a total 150 points : 6


（略）参见专门人工神经网络分类

## 5.5支持向量机（SVM）

### 5.5.2 线性支持向量机：可分情况

1.线性决策边界

w ⋅ x s + b > 0 w \cdot x_s +b > 0

w ⋅ x c + b < 0 w \cdot x_c +b < 0

y = { 1 , 如 果 w ⋅ z + b > 0 − 1 , 如 果 w ⋅ z + b < 0 y=\begin{cases} 1,如果w \cdot z +b>0\\ -1,如果w \cdot z +b<0 \\ \end{cases}
2.线性分类器的边缘

l 1 : w ⋅ x + b = 1 l 2 : w ⋅ x + b = − 1 l_1:w \cdot x +b =1\\ l_2:w \cdot x + b =-1\\

3.学习线性SVM模型

SVM的训练阶段包括从训练中估计决策边界的参数w和b，参数w和b必须满足下面的两个条件：
w ⋅ x i + b ≥ 1 ， 如 果 y i = 1 w ⋅ x i + b ≤ 1 ， 如 果 y i = − 1 这 两 个 式 子 可 以 概 括 为 如 下 的 形 式 ： y i ( w ⋅ x i + b ) ≥ 1 ， i = 1 ， 2... , N 此 外 , S V M 学 习 到 的 参 数 w 和 b 除 了 满 足 上 面 的 式 子 外 ， 还 应 该 使 决 策 边 缘 d = 2 ∣ ∣ w ∣ ∣ 最 大 ， d 最 大 等 价 于 下 面 的 目 标 函 数 最 小 ： f ( w ) = ∣ ∣ w ∣ ∣ 2 2 w \cdot x_i +b \geq 1 ，如果y_i=1\\ w \cdot x_i +b \leq 1，如果y_i=-1\\ 这两个式子可以概括为如下的形式：\\ y_i(w \cdot x_i + b) \geq 1，i=1，2...,N\\ 此外,SVM学习到的参数w和b除了满足上面的式子外，\\ 还应该使决策边缘d=\frac{2}{||w||}最大，d最大等价于下面的目标函数最小：\\ f(w)=\frac{||w||^2}{2}\\

SVM线性可分的优化问题:
min ⁡ w ∣ ∣ w ∣ ∣ 2 2 y i ( w ⋅ x y i + b ) ≥ 1 , i = 1 , 2 , . . . , N \min \limits_{w}\frac{||w||^2}{2}\\ y_i(w \cdot x_yi + b) \geq 1 , i=1,2,...,N

λ i ≥ 0 λ i [ y i ( w i ⋅ x i + b ) − 1 ] = 0 \lambda_i \geq 0 \\ {}\\ \lambda_i[y_i(w_i \cdot x_i+b)-1]=0

L D = ∑ i = 1 N λ i − 1 2 ∑ i , j λ i λ j y i y j x i ⋅ x j L_D=\sum_{i=1}^{N}\lambda_i - \frac{1}{2}\sum_{i,j}\lambda_i \lambda_jy_iy_jx_i \cdot x_j

( ∑ i = 1 N λ i y i x i ⋅ x ) + b = 0 (\sum_{i=1}^{N}\lambda_iy_ix_i \cdot x)+b =0
b可以求解支持向量公式 λ i [ y i ( w ⋅ x i + b ) − 1 ] = 0 \lambda_i[y_i(w \cdot x_i +b)-1]=0 ,由于求解过程是数值计算得到的，所以b的值不唯一，我们在计算的过程中取b的平均数。

### 5.5.3 线性支持向量机：不可分情况

w ⋅ x i + b ≥ 1 − ξ i , 如 果 y i = 1 w ⋅ x i + b ≤ − 1 + ξ i , 如 果 y i = − 1 其 中 ， ∀ i : ξ i > 0 。 w \cdot x_i +b \ge 1-\xi_i,如果y_i=1\\ w \cdot x_i + b \le -1 + \xi_i,如果y_i=-1\\ 其中，\forall i: \xi_i >0。

f ( x ) = ∣ ∣ w ∣ ∣ 2 2 + C ( ∑ i = 1 N ξ i ) 2 C 和 k 都 为 用 户 指 定 的 惩 罚 项 的 参 数 。 f(x)=\frac{||w||^2}{2}+C(\sum_{i=1}^{N}\xi_i)^2\\ C和k都为用户指定的惩罚项的参数。

L p = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 N ξ i − ∑ i = 1 N λ i { y i ( w ⋅ x i + b ) − 1 + ξ i } − ∑ i = 1 N μ i ξ i L_p = \frac{1}{2}||w||^2 + C\sum_{i=1}^{N}\xi_i-\sum_{i=1}^{N}\lambda_i\{y_i(w \cdot x_i +b)-1+\xi_i\}-\sum_{i=1}^{N}\mu_i \xi_i

ξ ≥ 0 , λ i ≥ 0 , μ ≥ 0 λ i { y i ( w ⋅ x i + b ) − 1 + ξ i } = 0 μ i ξ i = 0 \xi \ge0,\lambda_i \ge 0,\mu \ge 0\\ \lambda_i\{y_i(w \cdot x_i +b)-1+ \xi_i\}=0\\ \mu_i \xi_i = 0

∂ L ∂ w j = w i − ∑ i = 1 N λ i y i x i j = 0 − − > w j = ∑ i = 1 N λ i y i x i j ∂ L ∂ b = − ∑ i = 1 N λ i y i = 0 − − > ∑ i = 1 N λ i y i = 0 ∂ L ∂ ξ i = C − λ i − μ i = 0 − − > λ i + μ i = C \begin{aligned} \frac{\partial{L}}{\partial w_j}&=w_i - \sum_{i=1}^N \lambda_i y_i x_{ij} = 0 -->w_j=\sum_{i=1}^N \lambda_i y_i x_{ij}\\ \frac{\partial{L}}{\partial b}&=-\sum_{i=1}^{N}\lambda_i y_i =0 -->\sum_{i=1}^{N}\lambda_iy_i =0\\ \frac{\partial L}{\partial \xi_i}&=C-\lambda_i-\mu_i = 0 --> \lambda_i + \mu_i =C \end{aligned}

L D = ∑ i = 1 N λ i − 1 2 ∑ i , j λ i λ j y i y j x i ⋅ x j L_D=\sum_{i=1}^{N}\lambda_i - \frac{1}{2}\sum_{i,j}\lambda_i\lambda_jy_iy_jx_i \cdot x_j

### 5.5.4 非线性支持向量机

1，属性变换

y ( x 1 , x 2 ) = { 1 , 如 果 ( x 1 − 0.5 ) 2 + ( x 2 − 0.5 ) 2 > 0.2 − 1 , 否 则 y(x_1,x_2)= \begin{cases} 1,如果\sqrt{(x_1-0.5)^2+(x_2-0.5)^2}>0.2\\ -1,否则 \end{cases}

( x 1 − 0.5 ) 2 + ( x 2 − 0.5 ) 2 = 0.2 进 一 步 简 化 为 ： x 1 2 − x 1 + x 2 2 − x 2 = − 0.46 通 过 下 面 的 变 换 Φ ( x ) 可 以 将 数 据 映 射 到 一 个 新 的 空 间 : Φ : ( x 1 , x 2 ) − − > ( x 1 2 , x 2 2 , 2 x 1 , 2 x 2 , 2 x 1 x 2 , 1 ) 在 变 换 后 的 空 间 中 寻 找 参 数 w = ( w 0 , w 1 , . . . , w 5 ) 使 得 ： w 5 x 1 2 + w 4 x 2 2 + w 3 2 x 1 + w 2 2 x 2 + w 1 2 x 1 x 2 + w 0 = 0 \sqrt{(x_1-0.5)^2+(x_2-0.5)^2}=0.2\\ {}\\ 进一步简化为：\\ {}\\ x_1^2 - x_1 + x_2^2-x_2=-0.46\\ {}\\ 通过下面的变换\Phi(x)可以将数据映射到一个新的空间:\\ {}\\ {}\\ \Phi:(x_1,x_2)-->(x_1^2,x_2^2,\sqrt{2}x_1,\sqrt{2}x_2,\sqrt{2}x_1x_2,1)\\ {}\\ 在变换后的空间中寻找参数w=(w_0,w_1,...,w_5)使得：\\ {}\\ w_5x_1^2+w_4x_2^2+w_3\sqrt{2}x_1+w_2\sqrt{2}x_2+w_1\sqrt{2}x_1x_2 + w_0 =0
x 1 2 − x 1 x_1^2-x_1 x 2 2 − x 2 x_2^2-x_2 为坐标绘图得到图(b)。

2.学习非线性SVM模型

1. 不清楚应当使用什么类型的映射函数
1. 在维空间中解约束优化问题仍然是一个困难的事情

min ⁡ w ∣ ∣ w ∣ ∣ 2 2 y i ( w ⋅ Φ ( x i ) + b ) ≥ 1 , i = 1 , 2 , . . . , N \min\limits_{w} \frac{||w||^2}{2}\\ {}\\ y_i(w \cdot \Phi(x_i)+b) \ge 1 ,i=1,2,...,N

L D = ∑ i = 1 n λ i − 1 2 ∑ i , j λ i λ j y i y j Φ ( x i ) ⋅ Φ ( x ) ( x j ) L_D = \sum_{i=1}^n \lambda_i - \frac{1}{2} \sum_{i,j}\lambda_i\lambda_jy_iy_j\Phi(x_i)\cdot\Phi(x)(x_j)

w = ∑ i λ i y i Φ ( x i ) λ i { y i ∑ j λ j y j ( Φ ( x j ) ⋅ Φ ( x i ) + b ) − 1 } = 0 w=\sum_i \lambda_i y_i \Phi(x_i)\\ \lambda_i\{y_i\sum_j\lambda_jy_j(\Phi(x_j)\cdot\Phi(x_i)+b)-1\}=0

f ( z ) = s i g n ( w ⋅ Φ ( z ) + b ) = s i g n ( ∑ i = 1 n λ j y j Φ ( x i ) ⋅ Φ ( z ) + b ) f(z)=sign(w \cdot \Phi(z) +b)=sign(\sum_{i=1}^{n}\lambda_jy_j\Phi(x_i)\cdot\Phi(z)+b)
3.核技术

Φ ( u ) ⋅ Φ ( v ) = ( u 1 2 , u 2 2 , 2 u 1 , 2 u 2 , 2 u 1 u 2 , 1 ) ⋅ ( v 1 2 , v 2 2 , 2 v 1 , 2 v 2 , 2 v 1 v 2 , 1 ) = ( u ⋅ v + 1 ) 2 \Phi(u) \cdot \Phi(v) \\ {}\\ =(u_1^2,u_2^2,\sqrt{2}u_1,\sqrt{2}u_2,\sqrt{2}u_1u_2,1) \cdot (v_1^2,v_2^2,\sqrt{2}v_1,\sqrt{2}v_2,\sqrt{2}v_1v_2,1)\\ {}\\ =(u \cdot v+1)^2

K ( u , v ) = Φ ( u ) ⋅ ϕ ( v ) = ( u ⋅ v + 1 ) 2 K(u,v)=\Phi(u)\cdot \phi(v)=(u\cdot v+1)^2

f ( z ) = s i g n ( ∑ i = 1 n λ j y j Φ ( x i ) ⋅ Φ ( z ) + b ) s i g n ( ∑ i − 1 n λ i y i ( x i ⋅ z + 1 ) 2 + b ) f(z)=sign(\sum_{i=1}^{n}\lambda_jy_j\Phi(x_i)\cdot\Phi(z)+b)\\ {}\\ sign(\sum_{i-1}^{n}\lambda_iy_i(x_i \cdot z+1)^2+b)
4.Mercer定理

Mercer定理 核函数K可以表示为:
K ( u , v ) = Φ ( u ) ⋅ Φ ( v ) 当 前 仅 当 对 于 任 意 满 足 ∫ g ( x ) 2 d x 为 极 限 值 的 函 数 g ( x ) , 则 ∫ K ( x , y ) g ( x ) g ( y a ) d x d y ≥ 0 K(u,v)=\Phi(u)\cdot\Phi(v)\\ 当前仅当对于任意满足\int g(x)^2 dx 为极限值的函数g(x),则\\ {}\\ \int K(x,y)g(x)g(ya)dx dy \ge 0

K ( x , y ) = ( x ⋅ y + 1 ) p K ( x , y ) = e − ∣ ∣ x − y ∣ ∣ 2 / ( x σ 2 ) K ( x , y ) = t a n h ( k x ⋅ y − σ ) K(x,y)=(x\cdot y+1)^p\\ {}\\ K(x,y)=e^{-||x-y||^2/(x\sigma^2)}\\ {}\\ K(x,y)=tanh(kx \cdot y - \sigma)

• 代码
from sklearn import svm
X = [[0,0],[1,1]]
y = [0,1]
clf = svm.SVC(gamma='auto')
clf.fit(X,y)
# 预测新的值：
clf.predict([[2,2]])

• 输出
array([1])


## 5.6 组合方法

• （1）通过处理训练数据集
• 装袋
• 提升
• （2）通过处理输入特征
• 随机森林
• （3）通过处理类标号

### 5.6.3 偏倚-方差分解

d f , θ ( y , t ) = B i a s θ + V a r i a n c e f + N o i s e t d_{f,\theta}(y,t)=Bias_{\theta}+Variance_f+Noise_t

### 5.6.4 装袋

• 例子
原始的基分类器：
x0.10.20.030.40.50.60.70.80.91
y111-1-111111

### 5.6.5 提升（boosting）

• （1）可以作抽样分布，从原始数据集中抽取出自主样本集

• （2）基分类器可以使用权值嘘唏有利于高权值样本的模型

• 例子

• （1）每轮提升结束时如何跟新样本的权值
• （2）如何组合每个分类器的预测

{ ( x j , y j ) ∣ j = 1 , 2 , . . . , N } \{(x_j,y_j)|j=1,2,...,N\} 表示包含N个训练样本的集合。在Adaboost算法中，基分类器 C i C_i 的重要性依赖于它的错误率。错误率 ε i \varepsilon_i 定义为：
ε i = 1 N ∑ j = 1 N w j I ( C i ( x j ) ≠ y i ) \varepsilon_i=\frac{1}{N}\sum_{j=1}^{N}w_j I(C_i(x_j)\not=y_i)

α i = 1 2 l n ( 1 − ε i ε ) \alpha_i = \frac{1}{2}ln(\frac{1-\varepsilon_i}{\varepsilon})

w i ( j + 1 ) = w i ( j ) Z j × { e − α j 如 果 C j ( x i ) = y i e − α j 如 果 C j ( x i ) ≠ y i w_i^(j+1)=\frac{w_i^(j)}{Z_j} \times \begin{cases} e^{-\alpha_j} 如果C_j(x_i)=y_i\\ e^{-\alpha_j} 如果C_j(x_i) \not=y_i \end{cases}

### 5.6.6 随机森林

• 代码实现
%matplotlib inline
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 实例化
# 训练 fit
# 导入测试集，score，Y_test
x_train,x_test,ytrain,ytest = train_test_split(wine.data,wine.target,test_size=0.3)
clf = DecisionTreeClassifier(random_state=0)
rfc = RandomForestClassifier(random_state=0)

clf = clf.fit(x_train,ytrain)
rfc = rfc.fit(x_train,ytrain)

score_c = clf.score(x_test,ytest)
score_r = rfc.score(x_test,ytest)

print("Single Tree{}".format(score_c)
,"Random.Forest:{}".format(score_r))

• 输出
Single Tree0.9259259259259259 Random.Forest:0.9814814814814815


## 5.7 不平衡类的问题

• 合格产品检验问题：不合格的产品的数量远远低于合格产品的数量
• 信用检测：合法交易远远多于欺诈交易

### 5.7.1 可选度量

• 混淆矩阵

+-

-f_-+(FP)f_--(TN)
• 精度/准确率：
p = T P T P + F P p=\frac{TP}{TP+FP}
• 召回率：
r = T P T P + F N r=\frac{TP}{TP+FN}
准确率和召回率不能同时减少，我们定义新的度量：F1
F 1 = 2 1 r + 1 p F_1=\frac{2}{\frac{1}{r}+\frac{1}{p}}

### 5.7.2 接收者操作特征曲线（ROC）

ROC的横坐标为假正率FPR，横坐标为真正率TPR，

• TPR=0,FPR=0:把每个实例都预测为负类的模型
• TPR=1,FPR=1:把每个实例都预测为正类的模型
• TPR=1,FPR=0:理想模型
所以图片的左上角表示的是一个理想的模型。

### 5.7.3 代价敏感学习

C t ( M ) = T P × C ( + , + ) + F P × C ( − , + ) + F N × C ( + , − ) + T N × C ( − , − ) C_t(M)=TP\times C(+,+) + FP \times C(-,+) + FN \times C(+,-) + TN \times C(-,-)

### 5.7.4 基于抽样的方法

• 不充分抽样
* 对1000个负样本，抽取100个
* 问题：不能很好的获取负样本中的信息，解决方法：重复多次抽样(组合学习)
• 过分抽样
* 复制100个正样本，直到和负样本一样多
* 问题：容易造成过拟合
• 混合方法
* 对多数类进行不充分抽样，对西游类进行过分抽样

## 5.8 多类问题

• 0
点赞
• 0
评论
• 3
收藏
• 打赏
• 扫一扫，分享海报

05-29 1438
09-30 4949

04-23 2556
05-31 759
12-07 1496
11-17 3998
05-26 8681
10-24 4128
03-02 241
11-02 3213
06-21

¥2 ¥4 ¥6 ¥10 ¥20

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