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
线性回归-梯度下降法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 编者注:本文包含了使用Python2.X读取数据、数据处理、作图,构建梯度下降法函数求解一元线性回归,并对结果进行...