算法引用的數(shù)據(jù)為python自帶的波士頓房?jī)r(jià)數(shù)據(jù)。代碼如下:
# data 第一列為標(biāo)記值
# data 后幾列為特征向量
# initialTheta 為需要求得的theta
import numpy as np
import sklearn.datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import matplotlib as mpl
import matplotlib.pyplot as plt
import warnings
###################
## data 第一列為真值,后面所有列為特征
## initialTheta 估算的權(quán)值初值
## featureNum 特征的個(gè)數(shù)
def RLS_Fun(data, initialTheta, featureNum):
Theta = initialTheta
P = 10 ** 6 * np.eye(featureNum)
lamda = 1
for i in range(len(data)):
featureMatrix = data[i][1:]
featureMatrix = featureMatrix.reshape(featureMatrix.shape[0], 1)
y_real = data[i][0]
K = np.dot(P, featureMatrix) / (lamda + np.dot(np.dot(featureMatrix.T, P), featureMatrix))
Theta = Theta + np.dot(K, (y_real - np.dot(featureMatrix.T, Theta)))
P = np.dot((np.eye(featureNum) - np.dot(K, featureMatrix.T)), P)
return Theta
if __name__ == '__main__':
warnings.filterwarnings(action='ignore')
dataInitial = sklearn.datasets.load_boston()
x = np.array(dataInitial.data)
y = np.array(dataInitial.target)
y = y.reshape((y.shape[0], 1))
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=0)
data = np.concatenate((y_train, x_train), axis=1)
featureNum = np.shape(x)[1] # 有幾個(gè)特征
initialTheta = 0.5 * np.ones((featureNum, 1))
Theta = RLS_Fun(data, initialTheta, featureNum)
y_pred = np.dot(x_test, Theta)
mse = mean_squared_error(y_test, y_pred)
print('均方誤差:', mse)
t = np.arange(len(y_pred))
mpl.rcParams['font.sans-serif'] = ['simHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(facecolor='w')
plt.plot(t, y_test, 'r-', lw=2, label='真實(shí)值')
plt.plot(t, y_pred, 'g-', lw=2, label='估計(jì)值')
plt.legend(loc='best')
plt.title('波士頓房?jī)r(jià)預(yù)測(cè)', fontsize=18)
plt.xlabel('樣本編號(hào)', fontsize=15)
plt.ylabel('房屋價(jià)格', fontsize=15)
plt.grid()
plt.show()
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
