資源簡介
神經網絡擬合曲線
代碼片段和文件信息
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?multiprocessing?import?Process?Lock?Array
import?time
def?load_data(filename):
????“““載入數據。“““
????xys?=?[]
????with?open(filename?‘r‘)?as?f:
????????for?line?in?f:
????????????xys.append(map(float?line.strip().split()))
????????xs?ys?=?zip(*xys)
????????return?np.asarray(xs)?np.asarray(ys)
def?identity_basis(x):
????ret?=?np.expand_dims(x?axis=1)
????return?ret
def?gaussian_basis(x?feature_num=20):
????‘‘‘高斯基函數‘‘‘
????#==========
????#todo?‘‘‘請實現高斯基函數‘‘‘
????ret_x?=?np.expand_dims(x?axis=1)
????max_x?=?np.max(x)
????min_x?=?np.min(x)
????line_number?=?ret_x.shape[0]
????l?=?(max_x-min_x)/19
????u?=?np.zeros((line_number20)dtype=float)
????for?j?in?range?(020):
????????u[:j]?=?min_x+l*j
????ret?=?np.zeros((line_number20)dtype=float)
????for?j?in?range(020):
????????for?i?in?range(0line_number):
????????????ret[ij]=np.exp(-((ret_x[i:]-u[ij])*(ret_x[i:]-u[ij]))/(l*l))
????#==========
???
????return?ret
def?main(x_train?y_train):
????“““
????訓練模型,并返回從x到y的映射。
????
????“““
????#basis_func?=?identity_basis
????basis_func?=?gaussian_basis
???
????phi0?=?np.expand_dims(np.ones_like(x_train)?axis=1)
????phi1?=?basis_func(x_train)
????phi?=?np.concatenate([phi0?phi1]?axis=1)
????#==========
????#todo?‘‘‘計算出一個優化后的w,請分別使用最小二乘法以及梯度下降兩種辦法優化w‘‘‘
????w?=?np.zeros((21)dtype=float)
????w?=?np.linalg.inv((np.transpose(phi)).dot(phi)).dot(np.transpose(phi)).dot(np.transpose(y_train))
????#==========
????
????def?f(x):
????????phi0?=?np.expand_dims(np.ones_like(x)?axis=1)
????????phi1?=?basis_func(x)
????????phi?=?np.concatenate([phi0?phi1]?axis=1)
????????
????????y?=?np.dot(phi?w)
????????return?y
????????pass
????return?f
def?evaluate(ys?ys_pred):
????“““評估模型。“““
????std?=?np.sqrt(np.mean(np.abs(ys?-?ys_pred)?**?2))
????return?std
#?程序主入口(建議不要改動以下函數的接口)
if?__name__?==?‘__main__‘:
????train_file?=?‘train.txt‘
????test_file?=?‘test.txt‘
????#?載入數據
????x_train?y_train?=?load_data(train_file)
????x_test?y_test?=?load_data(test_file)
????#?使用線性回歸訓練模型,返回一個函數f()使得y?=?f(x)
????f?=?main(x_train?y_train)
????y_train_pred?=?f(x_train)
????std?=?evaluate(y_train?y_train_pred)
????print(‘訓練集預測值與真實值的標準差:{:.1f}‘.format(std))
????
????#?計算預測的輸出值
????y_test_pred?=?f(x_test)
????#?使用測試集評估模型
????std?=?evaluate(y_test?y_test_pred)
????print(‘預測值與真實值的標準差:{:.1f}‘.format(std))
????#顯示結果
????plt.plot(x_train?y_train?‘ro‘?markersize=3)
????plt.plot(x_test?y_test?‘k‘)
????plt.plot(x_test?y_test_pred?‘k‘)
????plt.xlabel(‘x‘)
????plt.ylabel(‘y‘)
????plt.title(‘Linear?Regression‘)
????plt.legend([‘train‘?‘test‘?‘pred‘])
????plt.show()
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2975??2020-11-04?22:01??linear-model.py
?????文件????????3580??2020-10-29?09:43??test.txt
?????文件????????5315??2020-10-29?09:43??train.txt
- 上一篇:神經網絡預測控制
- 下一篇:12306搶票代碼(基于python2)
評論
共有 條評論