1. 程式人生 > >python實現線性回歸

python實現線性回歸

__main__ .sh wax 多少 高斯分布 p s margin def gre

一、 必備的包

一般而言,這幾個包是比較常見的:

• matplotlib,用於繪圖

• numpy,數組處理庫

• pandas,強大的數據分析庫

• sklearn,用於線性回歸的庫

• scipy, 提供很多有用的科學函數

我一般是用pip安裝,若不熟悉這些庫,可以搜索一下它們的簡單教程。

二、 線性回歸

為了盡量簡單,所以用以下一元方程式為例子:

技術分享

典型的例子是房價預測,假設我們有以下數據集:

技術分享

我們需要通過訓練這些數據得到一個線性模型,以便來預測大小為700平方英尺的房價是多少。

詳細代碼如下:

import
matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn import datasets, linear_model def get_data(file_name): data = pd.read_csv(file_name) X_parameter = [] Y_parameter = [] for single_square_feet ,single_price_value in zip(data[square_feet],data[price
]): X_parameter.append([float(single_square_feet)]) Y_parameter.append(float(single_price_value)) return X_parameter,Y_parameter def linear_model_main(X_parameters,Y_parameters,predict_value): regr = linear_model.LinearRegression() regr.fit(X_parameters, Y_parameters) predict_outcome
= regr.predict(predict_value) predictions = {} predictions[intercept] = regr.intercept_ predictions[coefficient] = regr.coef_ predictions[predicted_value] = predict_outcome return predictions def show_linear_line(X_parameters,Y_parameters): regr = linear_model.LinearRegression() regr.fit(X_parameters, Y_parameters) plt.scatter(X_parameters,Y_parameters,color=blue) plt.plot(X_parameters,regr.predict(X_parameters),color=red,linewidth=4) #plt.xticks(()) #plt.yticks(()) plt.show() if __name__ == "__main__": X,Y = get_data(E:/machine_learning/LR/input_data.csv) #show_linear_line(X,Y) predictvalue = 700 result = linear_model_main(X,Y,predictvalue) print "Intercept value " , result[intercept] print "coefficient" , result[coefficient] print "Predicted value: ",result[predicted_value]

結果如圖:

技術分享

  技術分享

前兩個為公式裏的參數。

三、 多項式回歸

簡單的線性模型誤差難免高,於是引入多項式回歸模型,方程式如下:

技術分享

這次我們用scipy.stats中的norm來生成滿足高斯分布的數據,直接貼代碼:

# encoding:utf-8
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression, SGDClassifier
from sklearn.preprocessing import PolynomialFeatures, StandardScaler


x = np.arange(0, 1, 0.002) 
y = norm.rvs(0, size=500, scale=0.1) #高斯分布數據
y = y + x**2

plt.scatter(x, y, s=5)
y_test = []
y_test = np.array(y_test)

#clf = LinearRegression(fit_intercept=False)      
clf = Pipeline([(poly, PolynomialFeatures(degree=100)),
                (linear, LinearRegression(fit_intercept=False))])  
clf.fit(x[:, np.newaxis], y)
y_test = clf.predict(x[:, np.newaxis])

plt.plot(x, y_test, linewidth=2)
plt.grid() #顯示網格
plt.show()

結果如下:

技術分享

這裏取的最高次為100

參考博客:http://python.jobbole.com/81215/

python實現線性回歸