版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nalw2012/article/details/85488850
1、算法概述
回归是处理两个或两个以上变量之间互相依赖的定量关系的一种统计方法和技术。根据自变量和因变量的线性关系,可以分为线性回归和非线性回归。线性回归中,自变量和因变量的关系可以使用一条直线表示,表达形式为 。
2、算法实现
class LinearRegression:
"""使用Python实现的线性回归。(最小二乘法)"""
def fit(self, X, y):
"""根据提供的训练数据X,对模型进行训练。
Parameters
-----
X : 类数组类型。形状: [样本数量, 特征数量]
特征矩阵,用来对模型进行训练。
y : 类数组类型,形状: [样本数量]
"""
# 说明:如果X是数组对象的一部分,而不是完整的对象数据(例如,X是由其他对象通过切片传递过来),
# 则无法完成矩阵的转换。
# 这里创建X的拷贝对象,避免转换矩阵的时候失败。
X = np.asmatrix(X.copy())
# y是一维结构(行向量或列向量),一维结构可以不用进行拷贝。
# 注意:我们现在要进行矩阵的运算,因此需要是二维的结构,我们通过reshape方法进行转换。
y = np.asmatrix(y).reshape(-1, 1)
# 通过最小二乘公式,求解出最佳的权重值。
self.w_ = (X.T * X).I * X.T * y
def predict(self, X):
"""根据参数传递的样本X,对样本数据进行预测。
Parameters
-----
X : 类数组类型。形状: [样本数量, 特征数量]
待预测的样本特征(属性)。
Returns
-----
result : 数组类型
预测的结果。
"""
# 将X转换成矩阵,注意,需要对X进行拷贝。
X = np.asmatrix(X.copy())
result = X * self.w_
# 将矩阵转换成ndarray数组,进行扁平化处理,然后返回结果。
# 使用ravel可以将数组进行扁平化处理。
return np.array(result).ravel()