在學習了河北工業大學劉老師的課程與臺灣大學李宏毅老師的課程后,自己在kaggle 找了一個簡單的隨機線性回歸的資料集來實踐:https://www.kaggle.com/andonians/random-linear-regression
使用的是MSE(均方誤差)作為損失函式,看著好像是最小二乘法,但是為什么不叫最小二乘法,在周志華老師的《機器學習》一書中有提到:基于均方誤差最小化來進行模型求解的方法稱為“最小二乘法”,
import numpy as np
# 使用 Axes3D 的必要操作
import matplotlib.pyplot as plt
figure = plt.figure()
# ax = Axes3D(figure)
ax = figure.gca(projection="3d")
# 從檔案讀取資料
file = open('archive/test.csv')
file.readline() # 讀取第一行x,y
x_data = https://www.cnblogs.com/RabbitKeeper/p/[]
y_data = []
while True:
text = file.readline()
if not text:
break
data = text.split(',')
x_data.append(float(data[0]))
# 因為有'\n'所以要刪掉才能轉換為浮點數
y_data.append(float(data[1].rstrip('\n')))
file.close()
W = np.arange(0.5, 1.5, 0.01)
# bias只會影響影像的平移
B = np.arange(-2.0, 2.0, 0.1)
[w, b] = np.meshgrid(W, B)
# y = x-0.08
def forward(x):
return x * w + b
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
# 損失求和
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
l_sum += loss(x_val, y_val)
# 畫 Surface3d:https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html#surface-plots
ax.plot_surface(w, b, l_sum / len(x_data), cmap="rainbow")
plt.xlabel('w')
plt.ylabel('b')
plt.show()
輸出影像:

代碼中有幾個需要注意的地方:
1、b 也就是bias 只會影響影像的上下平移,并不會影響擬合,所以這里不用加b ,直接找w 與loss 的關系即可,
2、讀取資料時要注意資料的格式,下載的訓練資料集train.csv 第215 行x 與y 中間沒有',' 分隔,導致讀取的時候總是報錯,
代碼中也有許多問題:
1、讀取檔案的方式略微有點簡陋,無傷大雅但是看到kaggle 上有前輩使用pandas 讀取csv 檔案只需要短短幾行就可以將資料集讀取出來,我還遠遠不足,需要勤加學習,
2、這個代碼是人工找出最好的擬合函式,暫時還不會如何訓練出模型然后擬合測驗集,需要勤加學習,
3、對python 語言還不夠熟練,不太看得懂檔案,畫圖的時候參考了前輩的文章:https://blog.csdn.net/weixin_44841652/article/details/105017087,
總結:
盡管可以使用代碼實作簡單的線性回歸,但是只是最基礎的,把資料輸入excel 也可以做出來的線性回歸,甚至excel 還能做的比我好,所以還是要多學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280181.html
標籤:其他
上一篇:0603-常用的神經網路層
下一篇:0607-引數初始化策略
