线性模型

线性模型(linear model)

基本形式

f ( x ) = w T x + b f(x) = w^Tx+b f(x)=wTx+b

经典线性模型应用

  • 回归任务
  • 二分类
  • 多分类
线性回归

线性回归模型试图学得:
f ( x i ) = w x i + b , 使 得 f ( x i ) ≈ y f(x_i)=wx_i+b,使得f(x_i)\approx y f(xi)=wxi+b,使f(xi)y

性能度量(衡量学习效果):均方误差
( w ∗ , b ∗ ) = a r g m i n ∑ i = 1 m ( f ( x i ) − y i ) 2 = a r g m i n ∑ i = 1 m ( y i − w x i − b ) 2 (w^*,b^*) = arg min\sum_{i=1}^{m}(f(x_i)-y_i)^2\\ = arg min\sum_{i=1}^{m}(y_i-wx_i-b)^2\\ (w,b)=argmini=1m(f(xi)yi)2=argmini=1m(yiwxib)2

均方误差 是回归任务中最常用的性能度量。基于均方误差最小化来进行线性模型求解的方法称为"最小二乘法"。在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线上的欧式距离之和最小。求解 w w w b b b 使得 E ( W , B ) = ∑ i = 1 m ( y i − w x i − b ) 2 E_{(W,B)}=\sum_{i=1}^{m}(y_i-wx_i-b)^2 E(W,B)=i=1m(yiwxib)2 最小化的过程,称为线性回归模型的最小二乘"参数估计"。

E ( w , b ) E(w,b) E(w,b) 分别对 w w w b b b 求导:

∂ E ( w , b ) ∂ w = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) , ∂ E ( w , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) , \frac{\partial E(w,b)}{\partial w}=2(w\sum_{i=1}^{m}x_i^2-\sum_{i=1}^{m}(y_i-b)x_i),\\ \frac{\partial E(w,b)}{\partial b}=2(mb-\sum_{i=1}^{m}(y_i-wx_i)), wE(w,b)=2(wi=1mxi2i=1m(yib)xi),bE(w,b)=2(mbi=1m(yiwxi)),

令偏导为 0,可以得到最优解得闭式解:
w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = 1 m ∑ i = 1 m ( y i − w x i ) w = \frac{\sum_{i=1}^{m}y_i(x_i-\bar{x})}{\sum_{i=1}^{m}x_i^2-\frac{1}{m}(\sum_{i=1}^{m}x_i)^2}\\ b = \frac{1}{m}\sum_{i=1}^{m}(y_i-wx_i) w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)b=m1i=1m(yiwxi)

多元线性回归:
f ( x i ) = w T x i + b , 使 得 f ( x i ) ≈ y i f(x_i)=w^Tx_i+b,使得f(x_i)\approx y_i f(xi)=wTxi+b,使f(xi)yi

性能度量:
w ^ ∗ = a r g m i n ( y − X w ^ ) T ( y − X w ^ ) \hat{w}^*=arg min(y-X\hat{w})^T(y-X\hat{w}) w^=argmin(yXw^)T(yXw^)

求偏导:
∂ E w ^ w ^ = 2 X T ( X w ^ − y ) \frac{\partial E_{\hat{w}}}{\hat{w}} = 2X^T(X\hat{w}-y) w^Ew^=2XT(Xw^y)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import linear_model
from sklearn.metrics import r2_score, mean_squared_error
def setData(n):
    # 线性模型实战
    data = []
    for i in range(n):
        x1 = np.random.uniform(0., 10.)  # 随机采样输入x
        x2 = np.random.uniform(0., 10.)  # 随机采样输入x
        # 采样高斯噪声
        eps = np.random.normal(0., 0.1)
        # 得到模型的输出
        y = 1.452 * x1 + 1.848 * x2 + 2.523 + eps
        data.append([x1,x2,y])
    data = np.array(data)

    return data
n = 270
theta = 0.3

data = setData(n)

# fit_intercept=True 设置偏置
reg = linear_model.LinearRegression(fit_intercept=True)

reg.fit(data[:int(n*theta),0:2],data[:int(n*theta),-1])

print("w:{}\n b:{}".format(reg.coef_,[reg.intercept_]))

pre = reg.predict(data[int(n*theta):n,0:2])

print('Coefficient of determination: %.2f'%r2_score(data[int(n*theta):n,2], pre))
print('Mean squared error: %.2f'%mean_squared_error(data[int(n*theta):n,2], pre))
w:[1.45605848 1.86095833]
 b:[2.4422744187779024]
Coefficient of determination: 1.00
Mean squared error: 0.01
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data[int(n*theta):n,0],data[int(n*theta):n,1],data[int(n*theta):n,2],c='b',marker='^')
ax.scatter(data[int(n*theta):n,0],data[int(n*theta):n,1],pre,c='r')


plt.figure()
plt.scatter(data[int(n*theta):n,0],data[int(n*theta):n,1],data[int(n*theta):n,2],alpha=0.2)
plt.scatter(data[int(n*theta):n,0],data[int(n*theta):n,1],pre,c='r',alpha=0.2)

# plt.show()
<matplotlib.collections.PathCollection at 0x1456ad835c0>

在这里插入图片描述

在这里插入图片描述

对数线性回归:

将输出标记的对数作为线性模型逼近的目标。

l n y = w T x + b lny=w^Tx+b lny=wTx+b

广义线性模型:

其中 g ( ⋅ ) g(·) g() 称为联系函数,显然,对数线性回归就是广义线性模型在 g ( ⋅ ) = l n ( ⋅ ) g(·)=ln(·) g()=ln() 时的特例.

y = g − 1 ( w T x + b ) y = g^{-1}(w^Tx+b) y=g1(wTx+b)


对数几率回归(log-linear regression)

考虑二分类任务,其输出标记 y ∈ { 0 , 1 } y\in\{0,1\} y{0,1} ,将 z = w T x + b z=w^Tx+b z=wTx+b 映射到 0/1 值,最理想的是 单位阶跃函数(unit-step function)

# 阶跃函数
def unit_step(x):
    y = x>0
    return y.astype(np.int)
x = np.linspace(-10,10,200)
y = unit_step(x)
plt.scatter(x,y,alpha=0.2,c='r')
plt.plot(x,y,c='b',alpha=0.8)
plt.xlabel('x')
plt.ylabel('y')
# plt.show()
Text(0,0.5,'y')

在这里插入图片描述

由于单位阶跃函数的不连续,我们通常选择近似单位阶跃函数并且单调可微的 对数几率函数(logistic function) 替代。
y = 1 1 + e − z y = \frac{1}{1+e^{-z}} y=1+ez1

对数几率函数是一种 S i g m o i d Sigmoid Sigmoid 函数(形似 S S S 的函数)。

# 对数几率函数
def logistic(x):
    y = 1/(1+np.exp(-x))
    
    return y
x = np.linspace(-10,10,200)
y = logistic(x)
plt.scatter(x,y,alpha=0.2,c='r')
plt.plot(x,y,c='b',alpha=0.8)
plt.xlabel('x')
plt.ylabel('y')
# plt.show()
Text(0,0.5,'y')

在这里插入图片描述

将对数几率函数作为 g − ( ⋅ ) g^-(·) g() 代入广义线性模型得到:
y = 1 1 + e − ( w T x + b ) l n ( y 1 − y ) = w T x + b y = \frac{1}{1+e^{-(w^Tx+b)}}\\ ln(\frac{y}{1-y})=w^Tx+b y=1+e(wTx+b)1ln(1yy)=wTx+b
y 1 − y \frac{y}{1-y} 1yy 称为几率 (odds),反映了 x x x 作为正例的相对可能性,对几率取对数则可以得到对数几率(log odds / logit) l n y 1 − y ln\frac{y}{1-y} ln1yy

···


线性判别分析

线性判别分析( L i n e a r D i s c r i m i n a n t A n a l y s i s Linear DiscriminantAnalysis LinearDiscriminantAnalysis,简称 L D A LDA LDA )是一种经典的线性学习方法。

L D A LDA LDA 的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。


多分类学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值