线性模型

  • 1. 基本形式

即已知x,y通过机器学习的算法求得w与b


  • 2.线性回归

  • 2.1 问题描述
  • 2.2 一元线性回归
  • 2.2.1 问题描述

只有一个属性,即d=1
w,b为单个的数

  • 2.2.2 目标函数

均方误差对应了常用的欧几里得距离简称“欧氏距离”,基于均方误差最小化来进行模型求解的方法称为“最小二乘法”

  • 2.2.3 目标函数求解与证明
  • 2.2.4 模拟实验
  • 方法一

随机生成一些先行数据集

import numpy as np
from matplotlib import pyplot as plt
x=2*np.random.rand(100,1)
y=4 + 3*x + np.random.rand(100,1)
plt.scatter(x,y,s=10,color='g',marker='*',alpha=0.4)
y=range(0,16,2)
plt.yticks(y)
plt.xlabel('X1')
plt.ylabel('y')
plt.show()

使用标准方程来计算θ^,使用numpy的线性代数模块(np.linalg)中的inv()函数来对矩阵求逆,并用dot()方法计算矩阵的内积:

import numpy as np
from matplotlib import pyplot as plt
X=2*np.random.rand(100,1)
X=np.matrix(X)
y=4 + 3*X + np.random.rand(100,1)
y=np.matrix(y)
X_b=np.c_[np.ones((100, 1)), X]
theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print(theta_best)

实际用来生成数据的函数是y=4+3*x1+高斯噪声
实验的公式结果

[[4.49764198]
 [2.95571874]]

非常接近,噪声的存在,其不可能完全还原为原本的函数
现在用θ^做出预测

X_new=np.array([[0],[2]])
X_new_b=np.c_[np.ones((2,1)),X_new]

y_predict=X_new_b.dot(theta_best)

plt.plot(X_new,y_predict,'r-')
plt.plot(X,y,'b.')
plt.axis([0,2,0,15])
plt.show()
  • 方法二

使用Scikit-Learn执行线性回归

lin_reg=LinearRegression()
lin_reg.fit(X,y)
#[4.49079138] [[3.01587697]]
X_new=np.array([[0],[2]])
X_new_b=np.c_[np.ones((2,1)),X_new]
lin_reg.predict(X_new)
#[[ 4.51503205]
#[10.45564916]]
  • 方法三

LinearRegression类基于scipy.linalg.lstsq()函数(名称代表“最小二乘”)

X_b=np.c_[np.ones((100, 1)), X]

theta_best_svd,residuals,rank,s=np.linalg.lstsq(X_b,y,rcond=1e-6)
#[[4.4350753]
#[3.0726514]]
  • 方法四(★★★)

使用np.linalg.pinv()来计算这个伪逆,这种方法比计算标准方程更有效,再加上它可以很好地处理边界情况:的确,如果矩阵XтX是不可逆的,标准方程可能没有解,例如m<n或者某些特征是多余的,但伪逆总是有定义的

X_b=np.c_[np.ones((100, 1)), X]

np.linalg.pinv(X_b).dot(y)
#[[4.51562244]
 #[2.98318706]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值