2016-09-19 148 views
0

我想了解如何解釋用Python創建的指數函數的線性迴歸模型。我首先創建一個模型,首先通過取自然對數將指數Y數據轉換成直線。然後我創建一個線性模型並記錄斜率和截距。最後,我嘗試使用斜率和截距計算樣本值。具體來說,我試圖在X = 1.1時計算Y. Y應該是〜2.14,但是我的模型解釋產生了3.78的Y值。擬合迴歸線在python中的指數函數

問題1:我在解釋模型時做了什麼錯誤。

問題2:我必須重塑X數組或在regr.fit中出現錯誤。爲什麼我必須重塑X數組。

的代碼如下:

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets, linear_model 

# create some exponential data 
X = np.arange(1, 10, 0.1) 
print(X) 
Y = np.power(2, X) 
print(Y) 

# transform the exponential Y data to make it a straight line 
ln_Y = np.log(Y) 

# show the exponential plot 
plt.scatter(X, Y) 
plt.show() 

# Create linear regression object 
regr = linear_model.LinearRegression() 

# reshape the X to avoid regr.fit errors 
X = np.reshape(X, (X.size, 1)) 

# Train the model using the training sets 
regr.fit(X,ln_Y) 

# The coefficients 
print('Slope: \n', regr.coef_) 
print('Intercept: \n', regr.intercept_) 

# predict Y when X = 1.1 (should be approximately 2.14354693) 
# equation = e^(0.00632309*1.1) + 2.7772517886 
print("predicted val = ", np.exp(0.00632309*1.1) + 2.7772517886) 

回答

1

確保你有最新版本的scikit的;我有不同的coeffiecients你:

Slope: 
[ 0.69314718] 
Intercept: 
4.4408920985e-16 

你還需要採取整個表達式的exp,而不僅僅是X項:

In [17]: np.exp(0.69314718*1.1 + 4.4408920985e-16) 
Out[17]: 2.1435469237522917 
+1

非常感謝您maxymoo。我更新了我的scikit,並得到了和你一樣的係數。感謝關於如何通過整個表達式的exp來解釋模型的提示和具體示例。你是個學者和紳士! – user3457456