最小二乘法原理:
https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/2522346?fr=aladdin
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()
网友评论