Scikit learn 数据归一化后,使用回归分析如何预测y?

Scikit learn 数据归一化后,使用回归分析如何预测y?,scikit-learn,regression,normalization,linear-regression,statsmodels,Scikit Learn,Regression,Normalization,Linear Regression,Statsmodels,我已经对我的数据进行了标准化,并应用回归分析来预测产量(y)。 但我的预测输出也给出了归一化(0到1) 我希望我的预测答案是正确的数据,而不是0到1 数据: 接下来,我将使用以下代码规范化数据: from sklearn.preprocessing import Normalizer import pandas import numpy dataframe = pandas.read_csv('/home/desktop/yield.csv') array = dataframe.values

我已经对我的数据进行了标准化,并应用回归分析来预测产量(y)。 但我的预测输出也给出了归一化(0到1) 我希望我的预测答案是正确的数据,而不是0到1

数据:

接下来,我将使用以下代码规范化数据:

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:

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()
输出:

<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
==============================================================================

首先,在这种情况下不应该使用Normalizer。它不会跨功能标准化。它是沿着一排排做的。你可能不想要它

使用或缩放每个特征。有关更多详细信息,请参阅

其次,这些类有一个
逆变换()
函数,可以将预测的y值转换回原始单位

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)
但在我看来,这个线性模型不会给出太多的准确性,因为当我绘制数据时,这就是结果


该数据不适用于线性模型。使用其他技术,或获取更多数据。

首先,在这种情况下不应使用Normalizer。它不会跨功能标准化。它是沿着一排排做的。你可能不想要它

使用或缩放每个特征。有关更多详细信息,请参阅

其次,这些类有一个
逆变换()
函数,可以将预测的y值转换回原始单位

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)
但在我看来,这个线性模型不会给出太多的准确性,因为当我绘制数据时,这就是结果


该数据不适用于线性模型。使用其他技术,或获取更多数据。

当我使用MinMax scaler&standardize时,我将得到R平方:0.07,当我使用时,我将得到R平方:0.75,这就是为什么我选择,规格化,好的,我将使用RobustScaler,我不理解“逆变换”(reverse_transform)的含义可将预测y值转换回原始单位的函数”。你能解释一下吗?这对我很有帮助。这意味着它将反转缩放比例,并从缩放值中获取原始值。你根据训练期间使用的同一个缩放器变换测试数据,然后预测,然后再进行
逆变换
返回结果,以获得原始单位的答案。我将添加代码以显示。如果您满意,请关闭问题和/或接受答案。如果您需要更多帮助,请编辑问题或发布新问题。当我使用MinMax scaler&standardize时,我将得到R-square:0.07,当我使用时,我将得到R-square:0.75,这就是为什么我选择,normalize,好的,我将使用RobustScaler,我不理解“逆变换”(reverse_transform)的含义可将预测y值转换回原始单位的函数”。你能解释一下吗?这对我很有帮助。这意味着它将反转缩放比例,并从缩放值中获取原始值。你根据训练期间使用的同一个缩放器变换测试数据,然后预测,然后再进行
逆变换
返回结果,以获得原始单位的答案。我将添加代码以显示。如果您满意,请关闭问题和/或接受答案。如果需要更多帮助,请编辑问题或发布新问题。