Python从0到100(五十一):机器学习-线性回归及加州房价预测
线性回归是⼀种⽤于建⽴输⼊变量(特征)与连续⽬标变量之间关系的线性模型。它是机器学习和统计学中最简单、最常⻅的回归⽅法之⼀。线性回归假设特征与⽬标之间存在线性关系,并试图找到⼀条最佳拟合的直线(或超平⾯)来描述数据之间的关系。
在机器学习领域中的大多数任务通常都与预测(prediction)有关。 当我们想预测一个数值时,就会涉及到回归问题。 常见的例子包括:预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、 预测需求(零售销量等), 但不是所有的预测都是回归问题。
1.基本原理
线性回归基于以下基本原理:
- 线性关系假设:假设⽬标变量与特征之间存在线性关系。
- 最⼩化误差:通过最⼩化实际观测值与模型预测值之间的误差来确定最佳拟合直线。
2.线性模型
考虑⼀个简单的线性回归问题,其中有⼀个⾃变量(特征)x和⼀个因变量(输出)y。线性回归的基本公式可以表示为:
y=wx+b
在这个公式中:
- y是预测的因变量(输出)。
- x是输⼊⾃变量(特征)。
- w是⾃变量x的权重,表示x对y的影响程度。
- b是截距(偏置项),表示当x等于0时,y的值。
线性回归的⽬标是找到最佳的权重 和截距 ,以最好地拟合观测到的数据点。通常,使⽤最⼩⼆乘法(Least Squares Method)来估计w和 b,这意味着要找到使观测值与预测值之间的残差平⽅和最⼩化的权重和截距。
而在机器学习领域,我们通常使用的是高维数据集,建模时采用线性代数表示法会比较方便。 当我们的输入包含n个特征时,公式变为:
y=w1x1+w2x2+…+wnxn+b
其中, 是w1/w2..wn
是每个特征的权重,b
仍然是截距。⽬标仍然是找到最佳的权重和截距,以最⼩化残差平⽅和,以获得最佳的线性模型来拟合数据。
线性回归是⼀个简单但强⼤的⼯具,常⽤于数据分析、预测和建模任务,但前提是输⼊特征与输出之间存在线性关系。如果关系更为复杂,可能需要考虑其他类型的回归模型。
3.优缺点
优点
:
- 简单易懂:线性回归是⼀种简单且直观的建模⽅法,易于理解和解释。
- 计算效率⾼:计算成本较低,适⽤于⼤规模数据集。
- 可解释性强:模型的参数具有很好的可解释性,可以清晰地理解特征与⽬标之间的关系。
缺点
:
- 对⾮线性关系的拟合能⼒有限:线性回归⽆法捕捉⾮线性关系,因此在特征与⽬标之间存在复杂⾮线性关系时表现不佳。
- 对异常值敏感:线性回归对异常值⽐较敏感,可能会对模型的性能产⽣较⼤影响。
4.适⽤场景
线性回归适⽤于以下场景:
- 当特征与⽬标之间存在线性关系时,线性回归是⼀种简单且有效的建模⽅法。
- 需要快速建⽴⼀个基准模型或进⾏初步探索性分析时,线性回归是⼀个不错的选择。
- 当数据集较⼤且特征与⽬标之间的关系⼤致为线性时,线性回归可以提供⾼效的模型。
总之,线性回归是⼀种简单但功能强⼤的建模技术,尤其适⽤于特征与⽬标之间存在线性关系的情况。然⽽,在处理⾮线性问题时,就需要考虑其他更复杂的模型了。
5.线性回归加州房价预测
我们⾸先加载了加州房价数据集,然后划分成训练集和测试集。接着,我们训练了⼀个线性回归模型,并在测试集上进⾏了预测。
最后,我们计算了预测结果的均⽅误差,并绘制了预测值与真实值的散点图,以便观察模型的拟合效果。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 加载加州房价数据集
housing = fetch_california_housing()
X = pd.DataFrame(housing.data, columns=housing.feature_names)
y = housing.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练线性回归模型
lr = LinearRegression()
lr.fit(X_train, y_train)
# 在测试集上进⾏预测
y_pred = lr.predict(X_test)
# 计算均⽅误差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
# 绘制预测值与真实值的散点图
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel("True Values")
plt.ylabel("Predictions")
plt.title("True Values vs Predictions")
plt.show()
6.从线性回归到网络
到目前为止,我们只谈论了线性模型。 尽管神经网络涵盖了更多更为丰富的模型,我们依然可以用描述神经网络的方式来描述线性模型, 从而把线性模型看作一个神经网络。 首先,我们用“层”符号来重写这个模型。
我们将线性回归模型描述为一个神经网络。 需要注意的是,该图只显示连接模式,即只显示每个输入如何连接到输出,隐去了权重和偏置的值。
在 图3.1.2所示的神经网络中,输入为x1,…,xn,因此输入层中的输入数(或称为特征维度,feature dimensionality)为d。 网络的输出为o1,因此输出层中的输出数是1。 需要注意的是,输入值都是已经给定的,并且只有一个计算神经元。 由于模型重点在发生计算的地方,所以通常我们在计算层数时不考虑输入层。 也就是说, 图中神经网络的层数为1
。 我们可以将线性回归模型视为仅由单个人工神经元组成的神经网络,或称为单层神经网络。
对于线性回归,每个输入都与每个输出(在本例中只有一个输出)相连, 我们将这种变换称为全连接层(fully-connected layer)或称为稠密层(dense layer)。
- 点赞
- 收藏
- 关注作者
评论(0)