线性模型

线性模型(linear model)

基本形式

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

经典线性模型应用

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

线性回归

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

性能度量(衡量学习效果):均方误差
(w,b)=argmini=1m(f(xi)yi)2=argmini=1m(yiwxib)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\\

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

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

E(w,b)w=2(wi=1mxi2i=1m(yib)xi),E(w,b)b=2(mbi=1m(yiwxi)), \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)),

令偏导为 0,可以得到最优解得闭式解:
w=i=1myi(xixˉ)i=1mxi21m(i=1mxi)2b=1mi=1m(yiwxi) 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)

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

性能度量:
w^=argmin(yXw^)T(yXw^) \hat{w}^*=arg min(y-X\hat{w})^T(y-X\hat{w})

求偏导:
Ew^w^=2XT(Xw^y) \frac{\partial E_{\hat{w}}}{\hat{w}} = 2X^T(X\hat{w}-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>

在这里插入图片描述

在这里插入图片描述

对数线性回归:

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

lny=wTx+b lny=w^Tx+b

广义线性模型:

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

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


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

考虑二分类任务,其输出标记 y{0,1}y\in\{0,1\} ,将 z=wTx+bz=w^Tx+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=11+ez y = \frac{1}{1+e^{-z}}

对数几率函数是一种 SigmoidSigmoid 函数(形似 SS 的函数)。

# 对数几率函数
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^-(·) 代入广义线性模型得到:
y=11+e(wTx+b)ln(y1y)=wTx+b y = \frac{1}{1+e^{-(w^Tx+b)}}\\ ln(\frac{y}{1-y})=w^Tx+b
y1y\frac{y}{1-y} 称为几率 (odds),反映了 xx 作为正例的相对可能性,对几率取对数则可以得到对数几率(log odds / logit) lny1yln\frac{y}{1-y}

···


线性判别分析

线性判别分析(LinearDiscriminantAnalysisLinear DiscriminantAnalysis,简称 LDALDA )是一种经典的线性学习方法。

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


多分类学习


发布了21 篇原创文章 · 获赞 0 · 访问量 529
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览