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值為離散 在學習線性回歸的過程中,有很多機器學習的概念和方法是在這時候提出的。在現實中變數之間的關係,是有確定的和非確定的。確定關係指的是變數之間可以使用函式關係式表示,非確定的部分我們可以用概率分布來表示,如乙...
機器學習演算法 線性回歸
樣本特徵只有乙個的線性回歸問題,為簡單線性回歸。樣本特徵有多個的線性回歸問題,為多元線性回歸。兩個變數之間的關係是一次函式關係的 圖象是直線,這樣的兩個變數之間的關係就是 線性關係 如果不是一次函式關係的 圖象不是直線,就是 非線性關係 線性回歸演算法將無數的訓練集資料放在乙個座標系中,以座標系的乙...