机器学习(西瓜书)--第3章线性模型笔记

机器学习(西瓜书)--第3章线性模型笔记

  • 第三章 线性模型
    • 3.1 基本形式
    • 3.2 线性回归
    • 3.3 对数几率回归
    • 3.4 线性判别分析
    • 3.5 多分类学习
    • 3.6 类别不平衡问题
    • 线性判别分析LDA—西瓜书课后题3.5

第三章 线性模型

3.1 基本形式

3.2 线性回归

公式推导
机器学习(西瓜书)--第3章线性模型笔记_第1张图片
机器学习(西瓜书)--第3章线性模型笔记_第2张图片

3.3 对数几率回归

机器学习(西瓜书)--第3章线性模型笔记_第3张图片
机器学习(西瓜书)--第3章线性模型笔记_第4张图片

3.4 线性判别分析

机器学习(西瓜书)--第3章线性模型笔记_第5张图片

3.5 多分类学习

二分类推广到多分类,即将多分类任务拆分为若干个二分类任务求解。拆分策略:“一对一”、“一对其余”、“多对多”。示意图如下:
机器学习(西瓜书)--第3章线性模型笔记_第6张图片
MvM是每次若干个类作为正类,若干个其他类作为反类。最常用的MvM技术:“纠错输出码”。分为两步:编码和解码。
编码:对N个类别做N次划分,每次划分将一份份类别划分为正类,一部分划分为反类,从而二分类训练集;
解码:M个分类器分别对测试样本进行预测,预测标记成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。
机器学习(西瓜书)--第3章线性模型笔记_第7张图片

3.6 类别不平衡问题

正负样本差距大,影响模型结果,分类器预测几率:
y 1 − y > m + m − 则 预 测 为 正 例 \frac{y}{1-y} > \frac{m^+}{m^-} 则预测为正例 1yy>mm+
m + m^+ m+表示正例数目, m − m^- m表示负例数目
对预测值进行调整,只需令:
y ′ 1 − y ′ = y 1 − y ∗ m − m + \frac{y'}{1-y'}=\frac{y}{1-y} * \frac{m^-}{m^+} 1yy=1yym+m
这就是类别不平衡学习的一个基本策略-“再缩放”,需要“训练集是真实样本总体的无偏采样”,但往往不成立,也就是说未必能有效地基于训练集观测几率来推断出真实几率。现有技术:1、欠采样:除去反例,使正反数目接近;2、过采样:增加正例,使正反数目接近;3、阈值移动,把上式嵌入到决策过程中。

  • 过采样不能简单对正例进行重复采样,代表算法是SMOTE,通过插值产生额外的正例。
  • 欠采样若随机丢弃反例,会丢失一些重要信息,代表算法EasyEnsemble集成学习机制,将反例划分为若干个集合共不同学习器使用,这样从全局来看不会丢失重要信息。

线性判别分析LDA—西瓜书课后题3.5

时间有限,只选了一条进行代码实现,不知道结果对不对,网上查了下答案,有和我的类似的,也有和我不一样的,一样的链接如下点击查看,这个结果斜率差不多是5,和我的类似。
我是用python实现的,具体代码如下 代码片.

// An highlighted block
import pandas as pd
import matplotlib.pyplot as plt

dataSet = pd.read_table('data.txt',sep = ' ')

y = dataSet.loc[:,'label'].values
X = dataSet.values[:,0:2]
X_0 = dataSet[dataSet['label'] ==0].values[:,0:2]
X_1 = dataSet[dataSet['label'] ==1].values[:,0:2]

mu_0 = X_0.mean(0)
mu_1 = X_1.mean(0)

S_w = np.zeros((2,2))
for i in range(X_0.shape[0]):
    S_w = S_w + np.dot((X_0[i,:] - mu_0).reshape(1,2).T, (X_0[i,:] - mu_0).reshape(1,2))
for i in range(X_1.shape[0]):
    S_w = S_w + np.dot((X_1[i,:] - mu_0).reshape(1,2).T, (X_1[i,:] - mu_0).reshape(1,2))
    
#### svd 分解

U,Sigma,VT=np.linalg.svd(S_w)

S_w1 = np.dot(VT.T/Sigma, U)
w = np.dot(S_w1, (mu_0 - mu_1))
print (w)

plt.plot(X_0[:,0], X_0[:,1], '.r',label ='bad' )
plt.plot(X_1[:,0], X_1[:,1], '.k',label ='bad')
k = w[1]/w[0]
plt.plot([0,0.1],[0, 0.1*k],'-b')

结果如如下:
机器学习(西瓜书)--第3章线性模型笔记_第8张图片

你可能感兴趣的:(学习笔记,西瓜书,打卡,学习笔记)