1. 程式人生 > 其它 >python 迴歸_Python自編線性迴歸模型估計程式

python 迴歸_Python自編線性迴歸模型估計程式

技術標籤:python 迴歸python 線性迴歸python線性迴歸線性迴歸 python

Python自編線性迴歸模型估計程式(梯度下降)

import numpy as npclass reg(object):def__init__(self,eta=0.001,n_iter=100):        self.eta = eta        self.n_iter = n_iter    def fit(self, X, y):        self.w_ = np.zeros(1 + X.shape[1])        self.cost_ = []        for i in range(self.n_iter):            output = self.net_input(X)            errors = (y - output)            self.w_[1:] += self.eta * X.T.dot(errors)            self.w_[0] += self.eta * errors.sum()            cost = (errors**2).sum() / 2.0            self.cost_.append(cost)        return self    def net_input(self, X):        return np.dot(X, self.w_[1:]) + self.w_[0]    def predict(self, X):        return self.net_input(X)

呼叫自編reg程式估計模型:

import numpy as npimport pandas as pdimport osos.chdir('C:/python')df = pd.read_csv('./housing.data.txt',                 header=None,                 sep='\s+')df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS',              'NOX', 'RM', 'AGE', 'DIS', 'RAD',              'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']print(df.head(3))# 資料預處理X = df[['RM']].valuesy = df['MEDV'].valuesfrom sklearn.preprocessing import StandardScalersc_x = StandardScaler()sc_y = StandardScaler()X_std = sc_x.fit_transform(X)y_std = sc_y.fit_transform(y[:, np.newaxis]).flatten()from reg import *  #匯入自程式設計序lr = reg()lr.fit(X_std, y_std)print("Estimation Results:")print(lr.w_[1]) #訪問引數,self.w_print(lr.w_[0])print(lr.w_)num_rooms_std = sc_x.transform(np.array([[5.0]]))print(lr.predict(num_rooms_std))   #呼叫預測函式print(sc_y.inverse_transform(lr.predict(num_rooms_std)))

結果:4e2e914a0e4278f9abb8912f07b46efc.png