简体   繁体   English

更新成本函数和Theta参数时的简单线性回归误差

[英]Simple Linear Regression Error in updating cost function and Theta Parameters

I wrote a piece code to make a simple linear regression model using Python. 我编写了一段代码,以使用Python建立简单的线性回归模型。 However, I am having trouble getting the correct cost function, and most importantly the correct theta parameters. 但是,我很难获得正确的成本函数,最重要的是获得正确的theta参数。 The model is implemented from scratch and not using Scikit learn module. 该模型是从头开始实现的,而不是使用Scikit学习模块。 I have used Andrew NG's notes from his ML Coursera course to create the model. 我已经使用NG Coursera课程中的NG的笔记来创建模型。 The correct values of theta are [[-3.630291] [1.166362]]. theta的正确值为[[-3.630291] [1.166362]]。

Would be really grateful if someone could offer their expertise, and point out what I'm doing wrong. 如果有人可以提供他们的专业知识,并指出我做错了,将不胜感激。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Load The Dataset
dataset = pd.read_csv("Population vs Profit.txt",names=["Population" , 
"Profit"])
print (dataset.head())

col = len(dataset.columns)
x = dataset.iloc[:,:col-1].values
y = dataset.iloc[:,col-1].values

#Visualizing The Dataset
plt.scatter(x, y, color="red", marker="x", label="Profit")
plt.title("Population vs Profit")
plt.xlabel("Population")
plt.ylabel("Profit")
plt.legend()
plt.show()

#Preprocessing Data
dataset.insert(0,"x0",1)
col = len(dataset.columns)
x = dataset.iloc[:,:col-1].values
b = np.zeros(col-1)
m = len(y)
costlist = []
alpha = 0.001
iteration = 10000

#Defining Functions
def hypothesis(x,b,y):
    h = x.dot(b.T) - y
    return h

def cost(x,b,y,m):
    j = np.sum(hypothesis(x,b,y)**2)
    j = j/(2*m)
    return j

print (cost(x,b,y,m))

def gradient_descent(x,b,y,m,alpha):
    for i in range (iteration):
        h = hypothesis(x,b,y)
        product = np.sum(h.dot(x))
        b = b - ((alpha/m)*product)
        costlist.append(cost(x,b,y,m))

    return b,cost(x,b,y,m)

b , mincost = gradient_descent(x,b,y,m,alpha)
print (b , mincost)
print (cost(x,b,y,m))
plt.plot(b,color="green")
plt.show()

The dataset I'm using is the following text. 我正在使用的数据集是以下文本。

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705

One issue is with your "product". 一个问题是您的“产品”。 It is currently a number when it should be a vector. 当前应该是向量的数字。 I was able to get the values [-3.24044334 1.12719788] by rerwitting your for-loop as follows: 我可以通过如下重新编写for循环来获取值[-3.24044334 1.12719788]

def gradient_descent(x,b,y,m,alpha):
    for i in range (iteration):
        h = hypothesis(x,b,y)
        #product = np.sum(h.dot(x))
        xvalue = x[:,1]
        product = h.dot(xvalue)
        hsum = np.sum(h)
        b = b - ((alpha/m)* np.array([hsum , product]) )
        costlist.append(cost(x,b,y,m))

    return b,cost(x,b,y,m)

There's possibly another issue besides this as it doesn't converge to your answer. 除此之外,可能还有另一个问题,因为它不能收敛到您的答案。 You should make sure you are using the same alpha also. 您应该确保还使用相同的Alpha。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM