python机器学习之线性回归
线性回归是一种统计学习方法,它用于建立自变量与因变量之间的线性关系。在简单线性回归中,只有一个自变量和一个因变量;在多元线性回归中,有多个自变量和一个因变量。线性回归的目标是找到一个最优的线性函数,使得这个函数能够最好地拟合样本数据,同时能够泛化到新的数据。
线性回归模型可以表示为:
$$ y = β0 + β1x1 + β2x2 + ... + βnxn + ϵ $$
其中, y y y 是因变量, x 1 x_1 x1 到 x n x_n xn 是自变量, β 0 \beta_0 β0 到 β n \beta_n βn 是回归系数, ϵ \epsilon ϵ 是误差项。
线性回归模型的目标是最小化误差平方和,即:
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
\sum_{i=1}^n (y_i - \hat{y_i})^2
i=1∑n(yi−yi^)2
其中, y i y_i yi 是实际的因变量值, y i ^ \hat{y_i} yi^ 是由模型预测的因变量值。最小化误差平方和的过程可以通过最小二乘法来实现。
线性回归模型在许多领域得到了广泛的应用,例如经济学、金融学、社会科学、生物学、医学等。它是一种简单而有效的预测模型,但也有一些限制,例如它只能捕捉到自变量与因变量之间的线性关系,而无法处理非线性关系。
以下是使用Python的Scikit-learn库实现线性回归的代码示例:
from sklearn.linear_model import LinearRegression
# 创建线性回归模型对象
lr_model = LinearRegression()
# 准备训练数据
X_train = [[1, 2], [3, 4], [5, 6]]
y_train = [3, 7, 11]
# 训练模型
lr_model.fit(X_train, y_train)
# 使用模型进行预测
X_test = [[7, 8], [9, 10]]
y_pred = lr_model.predict(X_test)
# 打印预测结果
print(y_pred)
在这个示例中,我们首先导入了线性回归模型对象,然后创建了一个对象。接着,我们准备了训练数据,其中 X_train 是一个二维数组,包含了训练样本的自变量,y_train 是一个一维数组,包含了训练样本的因变量。我们使用 fit 方法对模型进行训练。
训练完成后,我们使用模型对测试数据 X_test 进行预测,得到了预测结果 y_pred。最后,我们打印出预测结果。
需要注意的是,这只是一个简单的示例,实际使用中,我们需要对数据进行预处理、特征工程等操作,以便更好地训练模型。
以下是使用Python的NumPy库手动实现简单线性回归模型的代码:
import numpy as np
class LinearRegression:
def __init__(self):
self.w = None
def fit(self, X, y):
# 添加偏置项
X = np.concatenate([X, np.ones((X.shape[0], 1))], axis=1)
# 计算最优解
self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
def predict(self, X):
# 添加偏置项
X = np.concatenate([X, np.ones((X.shape[0], 1))], axis=1)
# 进行预测
y_pred = X.dot(self.w)
return y_pred
在这个代码中,我们首先导入了NumPy库,然后定义了一个名为LinearRegression的类。这个类包含两个方法:fit和predict,分别用于训练模型和进行预测。
在fit方法中,我们首先添加了偏置项,即一个全为1的列向量,然后计算最优解。最优解可以使用最小二乘法来计算,这里使用了NumPy库提供的线性代数工具np.linalg.inv来计算矩阵的逆。
在predict方法中,我们同样添加了偏置项,然后使用训练好的模型参数进行预测。
需要注意的是,这只是一个简单的示例,实际使用中,我们需要对数据进行预处理、特征工程等操作,以便更好地训练模型。此外,这个模型只适用于简单线性回归,对于多元线性回归需要进行相应的修改。