目录
前言
线性回归理论推导
波士顿房价预测
matlab2021实现
python实现
前言 包含线性回归的梯度下降与正规方程的理论推导。
波士顿房价预测示例 matlab2021a版本 + juptypepython版本
全部的内容如下:因为无法上传pdf,公式再打一遍太折磨了,直接上传了markdown里的内容,以及juptype转为了py导出的版本。复制粘贴可能部分换行符可能修改。
全部的代码、数据集、理论推导pdf文件:Regression.7z-机器学习文档类资源-CSDN文库
线性回归理论推导 为markdown格式的,在在线编辑器里面可以查看。或者下载文件里有导出的pdf版。
正规方程证明:
文章图片
???????
**回归与分类 *Regression/classification****2021-10-05*?连续与离散## *Linear Regression*线性回归### 一次线性回归>一次线性代价函数关于两个自变量的图,3D曲面图,仅有全局最优解。对应一个特征,一次偏导计算很简单。***hypothesis function* 假设函数:**
$$
{H}_{({θ}_{0},{θ}_{1})}({x}_{i})\, =\, {θ}_{0}+{θ}_{1}*{x}_{i}
$$***cost function* 代价函数:**$$
{J}_{({x}_{i})}({θ}_{0},{θ}_{1})\, =\frac {1} {2m}\sum ^{m}_{i=1} {{[H}_{({θ}_{0},{θ}_{1})}}({x}_{i})\, -y({x}_{i}){]}^{2}
$$**优化目标*minimisize***$$
min({J}_{({θ}_{0},{θ}_{1})}({x}_{i})\, )\, \, \, for\, {θ}_{0}{,θ}_{1}
$$***Batch gradient descent Model* 梯度下降**?全览数据集$$
{θ}_{j}\, =\, {θ}_{j}\, -\, α\, *\, \frac {\partial (J({θ}_{0},{θ}_{1}))} {\partial {θ}_{j}}\, \,
$$$$
\frac {\partial (J({θ}_{0},{θ}_{1}))} {\partial {θ}_{j}}\, \, =\, \frac {1} {m}\sum ^{m}_{i=1} {[H({x}_{i})-y({x}_{i})]}\, *{x}_{i}
$$>1、α为学习率,随着迭代进行,在靠近局部最优处,梯度(斜率)不断减小至0,因此不必要设置α减小。
>
>2、对每一个参数同时进行梯度下降,而不是更新完一个利用新参数更新下一个参数
>
>3、θ0 对应的 x 可以认为全1___
___
### *Multiple features variables* 多特征1、*Gradient Descent* 梯度下降方法?类似一次回归模型。设m组数据(样本),n个特征,加上偏置,共需寻找n+1个最优参数(假设时候依然采用n,无影响)。同理可以设置偏置对应的数据为1。?***hypothesis function* 假设函数:**$$
{H}_{({θ}_{1},{θ}_{2},\cdot \cdot \cdot {θ}_{n})}({X}_{i})\, =\, {θ}_{1}*{x}^{i}_{1}+\, {θ}_{2}*{x}^{i}_{2}+\cdot \cdot \cdot +{θ}_{n}*{x}^{i}_{n}\, (i=1,\cdot \cdot \cdot ,m)
$$$$
\frac {\partial (J({θ}_{1},\cdot \cdot \cdot ,{θ}_{n}))} {\partial {θ}_{j}}\, \, =\, \frac {1} {m}\sum ^{m}_{i=1} {[H({x}_{i})-y({x}_{i})]}\, *{x}^{i}_{j}\, (1\ll i\ll m,\, 1\ll j\ll n)
$$?矩阵运算有:$$
H({x}_{i})\, =\, [{x}^{i}_{1},\, {x}^{i}_{2},\, \cdot \cdot \cdot ,{x}^{i}_{n}]\, {[{θ}_{1},{θ}_{2},\cdot \cdot \cdot ,{θ}_{n}]}^{T}
$$
$$
X_{m\times n}=
\begin{bmatrix}
x_{11}& x_{12}& \cdots& x_{1j}&\cdots&x_{1n}\\
x_{21}& x_{22}& \cdots& x_{2j}&\cdots&x_{2n}\\
\vdots & \vdots & \cdots & \vdots&\cdots&\vdots \\
x_{m1}& x_{m2}& \cdots& x_{mj}&\cdots&x_{mn}
\end{bmatrix}
=\left [ x_{ij}\right ]
$$
$$
X_{j}{m\times 1}=
\begin{bmatrix}
x_{1j}\\
x_{2j}\\
\vdots\\
x_{mj}\\\end{bmatrix}
$$
$$
θ{n\times 1}=
\begin{bmatrix}
θ_{1}\\
θ_{2}\\
\vdots\\
θ_{n}\\\end{bmatrix}
$$
$$
H\, =\, X\, *\, θ
$$
$$
\frac {\partial (J({θ}_{1},\cdot \cdot \cdot ,{θ}_{n}))} {\partial {θ}_{j}}\, \, =\, \frac {1} {m}\, *{[{X}_{j}]}^{T}*([H]-[Y])
$$2、*Normal equation*正规方程 ?求最优θ值,除进行迭代外,可计算cost function关于每个θ的偏导,令偏导为0,求解。?代价函数用矩阵形式变为:
$$
J(θ)\, =\, \frac {1} {2m}{(Xθ-Y)}^{T}(Xθ-Y)
$$
?偏导为0计算得到的θ:
$$
θ\, =\, {({X}^{T}X)}^{-1}{X}^{T}Y
$$$$
证明如下:
$$
?证明如下:
$$
{J}_{({x}_{i})}({θ}_{1},{θ}_{2},\cdot \cdot \cdot ,{θ}_{n})\, =\frac {1} {2m}\sum ^{m}_{i=1} {[H}({x}^{i})\, -y({x}^{i}){]}^{2}
$$
$$
\, =\frac {1} {2m}\sum ^{m}_{i=1} {[{X}^{i}}θ\, -{y}^{i}{]}^{2}
$$
$$
\, =\frac {1} {2m}[{({X}^{1}θ-{y}^{1})}^{2}+{({X}^{2}θ-{y}^{2})}^{2}+\cdot \cdot \cdot +{({X}^{m}θ-{y}^{m})}^{2}]
$$
?其中:
$$
\, =\frac {1} {2m}{Z}^{T}Z
$$$$
{X}^{i}\, =\, [{x}^{i}_{1},\, {x}^{i}_{2},\cdot \cdot \cdot ,{x}^{i}_{n}]
$$
$$
Z\, =\, {[({X}^{1}θ-{y}^{1}),\, ({X}^{2}θ-{y}^{2}),\cdot \cdot \cdot ,({X}^{m}θ-{y}^{m})]}^{T}
$$
$$
Z =
\begin{bmatrix}
X^{1}θ-y^{1}\\
X^{2}θ-y^{2}\\
\vdots\\
X^{m}θ-y^{m}\\
\end{bmatrix}=
\begin{bmatrix}
X^{1}\\
X^{2}\\
\vdots\\
X^{m}\\
\end{bmatrix}
*θ-
\begin{bmatrix}
y^{1}\\
y^{2}\\
\vdots\\
y^{m}\\
\end{bmatrix}=
Xθ - Y
$$
?得到: m个样本 n个特征
$$
X_{m\times n}=
\begin{bmatrix}
x^{1}_{1}& x^{1}_{2}& \cdots& x^{1}_{j}&\cdots&x^{1}_{n}\\
x^{2}_{1}& x^{2}_{2}& \cdots& x^{2}_{j}&\cdots&x^{2}_{n}\\
\vdots & \vdots & \cdots & \vdots&\cdots&\vdots \\
x^{m}_{1}& x^{m}_{2}& \cdots& x^{m}_{j}&\cdots&x^{m}_{n}\\
\end{bmatrix}
$$
?矩阵形式的代价函数得到。如果明白矩阵求导的公式,可以直接求偏导得到θ?当然也可以麻烦点算,如附图:------|梯度下降法|正规方程|
| :--------------------------: | :------------------------------: |
|需要选择学习率|不需要|
| 对于大量的特征值模型依然方便 | 大量特征值模型中求逆运算消耗量大 |
|适用与各种类型模型|仅用于线性,逻辑回归等不适用|> ?1、对于梯度下降法,学习率过大,有可能冲过最优值,导致代价函数随着迭代次数增大或者摇摆;而学习率过小则会使迭代过慢,当然,过大的学习率也可能导致迭代过慢。
>
> ?2、梯度下降法,可以对数据先进行处理,使数据处于一个大致相同的范围,并不要求必须全在一个范围,只是大致相同即可。Feature Scaling。或者产生新特征,去除无用的特征。
>
> ?3、Polynomial regression 多项式回归
>
> ?4、利用 代价函数--迭代次数 图像判断学习率等参数、特征选取合理性。
波士顿房价预测 数据集https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data
文章图片
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data
matlab2021实现
data = https://www.it610.com/article/load("G:/AI/Regression/housing.txt");
%%
%13个特征 先画出每一个特征对结果的图像
% MEDV: 自住房屋房价中位数(也就是均价)
Title = [
"CRIM: 城镇人均犯罪率"
"ZN: 住宅用地所占比例"
"INDUS: 城镇中非住宅用地所占比例"
"CHAS: 虚拟变量,用于回归分析"
"NOX: 环保指数"
"RM: 每栋住宅的房间数"
"AGE: 1940 年以前建成的自住单位的比例"
"DIS: 距离 5 个波士顿的就业中心的加权距离"
"RAD: 距离高速公路的便利指数"
"TAX: 每一万美元的不动产税率"
"PTRATIO: 城镇中的教师学生比例"
"B: 城镇中的黑人比例"
"LSTAT: 地区中有多少房东属于低收入人群"
"MEDV:中值"];
% 求维度之间的相关系数
rho = corr(data, 'type','pearson');
%热力图
figure(1) %热力图
string_name={'CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','RTRATIO','B','LSTAT','MEDV'};
xvalues = string_name;
yvalues = string_name;
h = heatmap(xvalues,yvalues,rho, 'FontSize',10, 'FontName','Times New Roman');
h.Title = 'Correlation Coefficient';
h.ColorbarVisible = 'on';
h.ColorData = https://www.it610.com/article/rho;
map = [1 1 1;
1 1 0;
0.5 1 0.4;
0.2 0.85 0.2;
0.4 0.7 1;
0.2 0.5 0.8];
% 自己定义颜色
colormap(map)
%colormap(jet)figure(2)
%各特征与数据结果对应图
for i = 1:4
for j = 1:4
number = 4*(i-1)+j;
if(number>13)
break;
end
subplot(4,4,number);
scatter(data(:,number), data(:,14), 3);
title(Title(number));
end
end%%
%数据分割 特征值 与 结果
X = [data(:,6), data(:,13)];
Y = data(:,14);
%数据归一化
%X = (mapminmax(X'))';
X = [ones(506,1),zscore(X)];
%标准化
%Y = (mapminmax(Y'))';
[m,n] = size(X);
%构建模型
%1、Gradient_Descent
figure(2)
%初始化 θ -1 - 1
A = -1;
B = 1;
iterations = 50;
theta = A + (B-A) * rand(n, 1);
%训练的参数
alpha = [0.001 0.003 0.007 0.01 0.05 0.1 0.2];
%学习率
oldtheta = theta;
J = zeros(1, iterations);
%代价函数计算结果
[~, alpha_numbers] = size(alpha);
for a = 1:alpha_numbers
%参数更新
theta = oldtheta;
for iter = 1:iterations
%第i次迭代
H = X * theta;
%预测结果
J(iter) = (H-Y)' * (H-Y) / 2 / m;
%计算代价函数
for j = 1:n
theta(j) = theta(j) - alpha(a) * (X(:,j)'*(H - Y)) / n ;
end
end
%画图空间
[minJ, minIndex] = min(J);
subplot(3,3,a);
xlim([0 iterations]);
scatter(1:iterations, J, 3);
title("a="+num2str(alpha(a))+" Jmin="+num2str(minJ)+" Jiter="+num2str(minIndex));
end% Normal_equation正规方程
subplot(3,3,9)
theta1 = (X'*X)^(-1) * X' * Y;
H = X * theta1;
%预测结果
J = (H-Y)' * (H-Y) / 2 / m;
%计算代价函数
%画图空间
xlim([0 iterations]);
scatter(1, J, 3);
title("Normal_equation"+" Jmin="+num2str(J));
%预测结果
Z = [X*theta1,Y];
figure(3)
scatter(Y,X*theta1,3);
hold on
plot([min(Y),max(Y)],[min(Y),max(Y)],'g')
python实现
#!/usr/bin/env python
# coding: utf-8# # 波士顿房价 线性预测模型# ZN 超过25000平方英尺的住宅用地所占比例
#
# INDUS 城镇非零售业务地区的比例
#
# CHAS 查尔斯河虚拟变量(如果土地在河边=1;否则是0)
#
# NOX 一氧化氮浓度(每1000万份)
#
# RM 平均每居民房数
#
# AGE 在1940年之前建成的所有者占用单位的比例
#
# DIS 与五个波士顿就业中心的加权距离
#
# RAD 辐射状公路的可达性指数
#
# TAX 每10,000美元的全额物业税率
#
# RTRATIO 城镇师生比例
#
# B 1000(Bk-0.63)^2其中Bk是城镇黑人的比例
#
# LSTAT 人口中地位较低人群的百分数
#
# MEDV (目标变量/类别属性)以1000美元计算的自有住房的中位数
# # # 导入模块数据的可视化分析# In[1]:import pandas as pd
import matplotlib.pyplot as plt
import math
import seaborn as sns
import numpy as np# In[2]:colums = ['ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','RTRATIO','B','LSTAT','MEDV']
df = pd.read_csv("G:/AI/Regression/housing.csv", names = colums, delimiter=r'\s+');
df.shape# In[3]:#数据统计
df.describe()# In[4]:#特征直方图 每一个特征的分类
df.hist(figsize=(15,10))# In[5]:#可视化 显示每一个特征 与 结果之间的关系
cols = 3
rows = math.ceil(12/cols)
plt.figure(figsize=(10,10))
for i in range(12):
plt.subplot(rows, cols, i+1);
plt.scatter(df[colums[i]], df[colums[12]])
plt.title(colums[i])
plt.tight_layout()#自适应
#RM LSTAT特征线性关系明显# In[6]:#相关性
corr = df.corr().abs()
corr# In[7]:#热力图
plt.figure(figsize=(10,10))
sns.heatmap(corr,annot=True)# # 构建模型 梯度下降 + 正规方程# In[8]:#RM LSTAT ->MEDV
theta = np.random.rand(3,)#向量
print(theta.shape)
#回归模型
def H(x):
return np.dot(theta,x.T)
#评估函数
def J(x, y):
return np.sum((H(x)-y)**2) / len(y)
theta# In[9]:#训练
learning_rate = 0.001train_x = df[['RM', 'LSTAT']]
train_x = (train_x - train_x.mean()) / train_x.std() #标准化
train_x = np.insert(train_x.to_numpy(), 0, 1, axis = 1)
train_y = df['MEDV'] #向量
print(train_x.shape)
print(train_y.shape)
for i in range(50):
theta = theta - learning_rate * np.dot(H(train_x) - train_y, train_x)
metrics = J(train_x, train_y)
print('第%d轮 均方误差%.04f theta%s' % (i+1, metrics, str(theta)))# In[10]:plt.figure(figsize = (20,5))
plt.plot(np.arange(0,train_x.shape[0]),train_y, 'r--')
plt.plot(np.arange(0,train_x.shape[0]),H(train_x), 'g-.')# In[11]:#正规方程
theta = np.dot(np.dot(np.linalg.pinv(np.dot(train_x.T, train_x)), train_x.T),train_y)
theta# In[ ]:
【机器学习|机器学习:1、线性回归--波士顿房价预测】
推荐阅读
- py|第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组
- python-pygame实现飞机大战-5-屏幕渲染绘制分数生命数超级炸弹数以及暂停功能
- 手语也能机器翻译了!机器学习手势识别功能了解一下
- #导入MD文档图片# 推荐一款阿里最新 Python 自动化开源工具!
- 人工智能,机器学习和深度学习之间的区别
- 如何执行Python脚本并检索Node.js中的输出(数据和错误)
- 优达学城深度学习之三(下)——卷积神经网络
- 如何使用Python检查字符串是否是回文
- 如何使用WxPython创建HTML文件查看器