Python實現機器學習演算法 線性回歸

2022-09-16 13:09:13 字數 2323 閱讀 3615

import numpy as np

from sklearn.datasets import load_diabetes

from sklearn.utils import shuffle

import matplotlib.pyplot as plt

def initialize_params(dims):

w = np.zeros((dims, 1))

b = 0

return w, b

def linear_loss(x, y, w, b):

num_train = x.shape[0]

# 模型公式

y_hat = np.dot(x, w) + b

# 損失函式

loss = np.sum((y_hat - y) ** 2) / num_train

# 引數偏導

dw = np.dot(x.t, (y_hat - y)) / num_train

db = np.sum(y_hat - y) / num_train

return y_hat, loss, dw, db

def linear_train(x, y, learning_rate, epochs):

# 引數初始化

w, b = initialize_params(x.shape[1])

loss_list =

for i in range(1, epochs):

# 計算當前**值、損失和梯度

y_hat, loss, dw, db = linear_loss(x, y, w, b)

# 基於梯度下降的引數更新

w += -learning_rate * dw

b += -learning_rate * db

# 列印迭代次數和損失

if i % 10000 == 0:

print('epoch %d loss %f' % (i, loss))

# 儲存引數

params =

# 儲存梯度

grads =

return loss_list, loss, params, grads

def predict(x, params):

w = params['w']

b = params['b']

y_pred = np.dot(x, w) + b

return y_pred

if __name__ == "__main__":

# 載入資料

diabets = load_diabetes()

data = diabets.data

target = diabets.target

# 打亂資料

x, y = shuffle(data, target, random_state=13)

# 劃分訓練集和測試集

offset = int(x.shape[0] * 0.9)

x_train, y_train = x[:offset], y[:offset]

x_test, y_test = x[offset:], y[offset:]

y_train = y_train.reshape((-1, 1))

y_test = y_test.reshape((-1, 1))

print(x_train.shape)

print(x_test.shape)

print(y_train.shape)

print(y_test.shape)

# 訓練

loss_list, loss, params, grads = linear_train(x_train, y_train, 0.01, 100000)

print(params)

# **

y_pred = predict(x_test, params)

print(y_pred[:5])

# 畫圖

f = x_test.dot(params['w']) + params['b']

plt.scatter(range(x_test.shape[0]), y_test)

plt.plot(f, color='darkorange')

plt.xlabel('x')

plt.xlabel('y')

plt.show()

plt.plot(loss_list, color='blue')

plt.xlabel('epochs')

plt.ylabel('loss')

plt.show()

機器學習演算法 線性模型

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

機器學習演算法 線性回歸

線性回歸應該算機器學習演算法裡面最基礎的演算法了,分別用作回歸 y值為連續值 和分類 y值為離散 在學習線性回歸的過程中,有很多機器學習的概念和方法是在這時候提出的。在現實中變數之間的關係,是有確定的和非確定的。確定關係指的是變數之間可以使用函式關係式表示,非確定的部分我們可以用概率分布來表示,如乙...

機器學習演算法 線性回歸

樣本特徵只有乙個的線性回歸問題,為簡單線性回歸。樣本特徵有多個的線性回歸問題,為多元線性回歸。兩個變數之間的關係是一次函式關係的 圖象是直線,這樣的兩個變數之間的關係就是 線性關係 如果不是一次函式關係的 圖象不是直線,就是 非線性關係 線性回歸演算法將無數的訓練集資料放在乙個座標系中,以座標系的乙...