线性回归-最小二乘法

最小二乘法原理:
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()

你可能感兴趣的:(线性回归-最小二乘法)