0

私はデータを正規化し、回帰分析を適用して歩留まり(y)を予測しています。 私の予測出力も(0〜1で)正規化しています 私は正しいデータ数ではなく、0 データを正規化した後、回帰分析を使用してyを予測する方法は?

1へのデータの私の予想の答えをしたい:

Total_yield(y) Rain(x) 
     64799.30 720.1 
     77232.40 382.9 
     88487.70 1198.2 
     77338.20 341.4 
     145602.05 406.4 
     67680.50 325.8 
     84536.20 791.8 
     99854.00 748.6 
     65939.90 1552.6 
     61622.80 1357.7 
     66439.60 344.3 

次に、私が持っています

array=normalizedX 
data = pandas.DataFrame(array,columns=['Total_yield','Rain']) 
import statsmodels.formula.api as smf 
lm = smf.ols(formula='Total_yield ~ Rain', data=data).fit() 
lm.summary() 
0:

from sklearn.preprocessing import Normalizer 
import pandas 
import numpy 
dataframe = pandas.read_csv('/home/desktop/yield.csv') 
array = dataframe.values 
X = array[:,0:2] 
scaler = Normalizer().fit(X) 
normalizedX = scaler.transform(X) 
print(normalizedX) 

    Total_yield  Rain 
0  0.999904 0.013858 
1  0.999782 0.020872 
2  0.999960 0.008924 
3  0.999967 0.008092 
4  0.999966 0.008199 
5  0.999972 0.007481 
6  0.999915 0.013026 
7  0.999942 0.010758 
8  0.999946 0.010414 
9  0.999984 0.005627 
10  0.999967 0.008167 

次に、私は、次のコードを使用してR-sqaureを計算するために、この正規化値を使用する:このコードを使用してデータを正規化します

出力:

<class 'statsmodels.iolib.summary.Summary'> 
""" 
          OLS Regression Results        
============================================================================== 
Dep. Variable:   Total_yield R-squared:      0.752 
Model:       OLS Adj. R-squared:     0.752 
Method:     Least Squares F-statistic:      1066. 
Date:    Thu, 09 Feb 2017 Prob (F-statistic):   2.16e-108 
Time:      14:21:21 Log-Likelihood:     941.53 
No. Observations:     353 AIC:       -1879. 
Df Residuals:      351 BIC:       -1871. 
Df Model:       1           
Covariance Type:   nonrobust           
============================================================================== 
       coef std err   t  P>|t|  [95.0% Conf. Int.] 
------------------------------------------------------------------------------ 
Intercept  1.0116  0.001 948.719  0.000   1.009  1.014 
Rain   -0.3013  0.009 -32.647  0.000  -0.319 -0.283 
============================================================================== 
Omnibus:      408.798 Durbin-Watson:     1.741 
Prob(Omnibus):     0.000 Jarque-Bera (JB):   40636.533 
Skew:       -4.955 Prob(JB):       0.00 
Kurtosis:      54.620 Cond. No.       10.3 
============================================================================== 

今、R-平方= 0.75、

regression model : y = b0 + b1 *x 

Yield = b0 + b1 * Rain 

Yield = intercept + coefficient for Rain * Rain 

Now when I use my data value for Rain data then it will gives this answer : 
Yield = 1.0116 + (-0.3013 * 720.1(mm)) = -215.95 

-215.95yield is wrong, 

And when I use normalize value for rain data then predicted yield comes in normalize value in between 0 to 1. 

I want predict if rainfall will be 720.1 mm then how many yield will be there? 

If anyone help me how to get predicted yield ? I want to compare Predicted yield vs given yield. 

答えて

2

まず、あなたは、この場合にはノーマライザーを使用しないでください。機能間で正規化されません。それは行に沿ってそれを行います。あなたはそれを望んでいないかもしれません。

MinMaxScalerまたはRobustScalerを使用して各機能を拡大/縮小します。詳細は、preprocessing docsを参照してください。

第2に、これらのクラスは予測されたy値を元の単位に戻すことができるinverse_transform()関数を持っています。

x = np.asarray([720.1,382.9,1198.2,341.4,406.4,325.8, 
       791.8,748.6,1552.6,1357.7,344.3]).reshape(-1,1) 
y = np.asarray([64799.30,77232.40,88487.70,77338.20,145602.05,67680.50, 
       84536.20,99854.00,65939.90,61622.80,66439.60]).reshape(-1,1) 

scalerx = RobustScaler() 
x_scaled = scalerx.fit_transform(x) 

scalery = RobustScaler()  
y_scaled = scalery.fit_transform(y) 

これらのスケーリングされたデータでstatsmodel.OLSと電話をかけてください。 予測しながら、最初のテストデータを変換:

x_scaled_test = scalerx.transform([720.1]) 

は、あなたの回帰モデルは、この値に適用し、その結果を取得します。このyの結果は、スケーリングされたデータに従います。

Yield_scaled = b0 + b1 * x_scaled_test 

逆変換して元の単位でデータを取得します。

Yield_original = scalery.inverse_transform(Yield_scaled) 

しかし、私はあなたのデータをプロットした場合、これは結果であるので、私の意見では、この線形モデルは、非常に精度を与えることはありません。 Rain(x) Yield(y) plot

このデータは線形モデルには適合しません。他のテクニックを使用するか、より多くのデータを入手してください。

+0

私はR-square:0.07を得て、私はR-squareを得ます:0.75、なぜ私が選択するのか、正規化しますか?RobustScaler、 –

+0

を使用します。予測されたyの値を元の単位に戻すことができるinverse_transform()関数の意味を理解できません。あなたは私にそれを教えてくれますか? –

+1

それはスケーリングを逆転させ、元の値をスケールされた値から戻すことを意味します。 –

関連する問題