美文网首页
线性回归-梯度下降法

线性回归-梯度下降法

作者: SLClinchen | 来源:发表于2018-11-08 09:47 被阅读0次
class LinearRegression:
    """使用Python语言实现线性回归算法。(梯度下降)"""
    
    def __init__(self, alpha, times):
        """初始化方法。
        
        Parameters
        -----
        alpha : float
            学习率。用来控制步长。(权重调整的幅度)
            
        times : int
            循环迭代的次数。
        """
        self.alpha = alpha
        self.times = times
        
    def fit(self, X, y):
        """根据提供的训练数据,对模型进行训练。
        
        Parameters
        -----
        X : 类数组类型。形状:[样本数量, 特征数量]
            待训练的样本特征属性。(特征矩阵)
        
        y : 类数组类型。形状:[样本数量]
            目标值(标签信息)。
        """
        
        X = np.asarray(X)
        y = np.asarray(y)
        # 创建权重的向量,初始值为0(或任何其他的值),长度比特征数量多1。(多出的一个值就是截距。)
        self.w_ = np.zeros(1 + X.shape[1])
        # 创建损失列表,用来保存每次迭代后的损失值。损失值计算: (预测值 - 真实值) 的平方和 除以2
        self.loss_ = []
        
        # 进行循环,多次迭代。在每次迭代过程中,不断的去调整权重值,使得损失值不断减小。
        for i in range(self.times):
            # 计算预测值
            y_hat = np.dot(X, self.w_[1:]) + self.w_[0]
            # 计算真实值与预测值之间的差距。
            error = y - y_hat
            # 将损失值加入到损失列表当中。
            self.loss_.append(np.sum(error ** 2) / 2)
            # 根据差距调整权重w_,根据公式: 调整为  权重(j) =  权重(j) + 学习率 * sum((y - y_hat) * x(j))
            self.w_[0] += self.alpha * np.sum(error)
            self.w_[1:] += self.alpha * np.dot(X.T, error) 
            
    def predict(self, X):
        """根据参数传递的样本,对样本数据进行预测。
        
        Parameters
        -----
        X : 类数组类型,形状[样本数量, 特征数量]
            待测试的样本。
            
        Returns
        -----
        result : 数组类型。
            预测的结果。
        """
        X = np.asarray(X)
        result = np.dot(X, self.w_[1:]) + self.w_[0]
        return result

相关文章

网友评论

      本文标题:线性回归-梯度下降法

      本文链接:https://www.haomeiwen.com/subject/shpixqtx.html