为什么线性回归方法的成本会增加?

数据挖掘 机器学习 Python 线性回归
2022-02-26 06:04:17

我正在从头开始实施线性回归模型。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 16 14:40:53 2017

@author: user
"""

import os
import random
os.chdir('/home/user/Desktop/andrewng/machine-learning-ex1/ex1')

import pandas as pd
data = pd.read_csv('/home/user/Desktop/andrewng/machine-learning-ex1/ex1/ex1data1.txt',header=None)

theta_0 = random.random() 
theta_1 = random.random() 
alpha = 0.001

print(len(data))


hist = -90
cost = 0
print('theta_0    + theta_1    ')
while(cost-hist>0.001):
    hist = cost
    cost = 0
    a = 0
    b = 0
    for i in range(len(data)):
        k = data.iloc[i]
        a = a +  theta_0 + theta_1*k[0] - k[1]
        b = b + (theta_0 + theta_1*k[0] - k[1])*k[0]
    theta_0 = theta_0 - alpha*a/len(data)
    theta_1 = theta_1 - alpha*b/len(data)
    #print(str(theta_0)+'    '+str(theta_1))
    for j in range(len(data)):
        k = data.iloc[i]
        cost  = cost + (theta_0 + theta_1*k[0] - k[1])**2
    cost = cost/(2*len(data))
    print(cost)
    #if(cost>hist):
    #    print(str(theta_0)+'    '+str(theta_1))
    #    break
print(str(theta_0)+'    '+str(theta_1))

根据理论,每次迭代的成本应该会降低,但对我来说,成本会不断增加。

数据

2个回答

原因是你的学习率 alpha 对于这个优化问题来说太大了。从一个非常小的值(< 0.000001)开始,您将观察到成本函数的下降。

请记住,当学习率太大时,梯度下降算法会错过全局最小值(全局最小值,因为 MSE 成本函数是凸的)并且会发散。这就是为什么您观察到 alpha = 0.001 时成本函数值仍在增加的原因。

您正在使用带有 MSE 的单变量线性回归,理论说的是事实,成本应该会降低。

原因不是学习率,而是一个错误:

for j in range(len(data)):
    k = data.iloc[i]

i 必须替换为 j。

我还建议用 for 循环替换 while:

for i in range(10):