python實現線性回歸
阿新 • • 發佈:2017-07-18
__main__ .sh wax 多少 高斯分布 p s margin def gre
一、 必備的包
一般而言,這幾個包是比較常見的:
• matplotlib,用於繪圖
• numpy,數組處理庫
• pandas,強大的數據分析庫
• sklearn,用於線性回歸的庫
• scipy, 提供很多有用的科學函數
我一般是用pip安裝,若不熟悉這些庫,可以搜索一下它們的簡單教程。
二、 線性回歸
為了盡量簡單,所以用以下一元方程式為例子:
典型的例子是房價預測,假設我們有以下數據集:
我們需要通過訓練這些數據得到一個線性模型,以便來預測大小為700平方英尺的房價是多少。
詳細代碼如下:
importmatplotlib.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實現線性回歸