2019.6.26 第一週 單變量線性迴歸模型實現(有問題待定)

數據集:

代碼:

import numpy as np
from matplotlib import pylab as pl

# 定義訓練數據
# (x,y)
x = np.array([2104, 1416, 1534, 852, ])
y = np.array([460, 232, 315, 178, ])


# 迴歸方程求取函數
def fit(x, y):
    # 確保x y數組長度小相等
    if len(x) != len(y):
        return
    numerator = 0.0
    denominator = 0.0
    # mean:求均值
    x_mean = np.mean(x)
    y_mean = np.mean(y)
    # 迭代x數組,y數組
    for i in range(len(x)):
        #
        numerator += (x[i] - x_mean) * (y[i] - y_mean)
        # square 求平方
        denominator += np.square((x[i] - x_mean))
    print('numerator:', numerator, 'denominator:', denominator)
    b0 = numerator / denominator
    b1 = y_mean - b0 * x_mean
    return b0, b1


# 定義預測函數
def predit(x, b0, b1):
    return b0 * x + b1


# 求取回歸方程
b0, b1 = fit(x, y)
print('Line is:y = %2.0fx + %2.0f' % (b0, b1))

# 預測用另一組數據
x_test = np.array([2000, 2100, 1000, 1500])
y_test = np.zeros((1, len(x_test)))
for i in range(len(x_test)):
    y_test[0][i] = predit(x_test[i], b0, b1)

# 繪製圖像
xx = np.linspace(0, 5)
yy = b0 * xx + b1
pl.plot(xx, yy, 'k-')
pl.scatter(x, y, cmap=pl.cm.Paired)
pl.scatter(x_test, y_test[0], cmap=pl.cm.Paired)
pl.show()

結果

問題:

我們發現b0=0!

解決:特徵縮放、均值歸一化

均值歸一化:

原來:

均值歸一化後:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章