Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在scikit学习回归中不标准化目标数据_Python_Machine Learning_Scikit Learn_Svm_Predict - Fatal编程技术网

Python 如何在scikit学习回归中不标准化目标数据

Python 如何在scikit学习回归中不标准化目标数据,python,machine-learning,scikit-learn,svm,predict,Python,Machine Learning,Scikit Learn,Svm,Predict,我试图在csv格式的铜矿企业数据集中预测未来的利润数据 我阅读了数据: data = pd.read_csv('data.csv') 我将数据拆分为: data_target = data[target].astype(float) data_used = data.drop(['Periodo', 'utilidad_operativa_dolar'], axis=1) x_train, x_test, y_train, y_test = train_test_split(data_used

我试图在csv格式的铜矿企业数据集中预测未来的利润数据

我阅读了数据:

data = pd.read_csv('data.csv')
我将数据拆分为:

data_target = data[target].astype(float)
data_used = data.drop(['Periodo', 'utilidad_operativa_dolar'], axis=1)
x_train, x_test, y_train, y_test = train_test_split(data_used, data_target, test_size=0.4,random_state=33)
from sklearn.preprocessing import StandardScaler
scalerX = StandardScaler().fit(x_train)
scalery = StandardScaler().fit(y_train)

x_train = scalerX.transform(x_train)
y_train = scalery.transform(y_train)
x_test = scalerX.transform(x_test)
y_test = scalery.transform(y_test)

print np.max(x_train), np.min(x_train), np.mean(x_train), np.max(y_train), np.min(y_train), np.mean(y_train)
创建svr预测值:

clf_svr= svm.SVR(kernel='rbf')
标准化数据:

data_target = data[target].astype(float)
data_used = data.drop(['Periodo', 'utilidad_operativa_dolar'], axis=1)
x_train, x_test, y_train, y_test = train_test_split(data_used, data_target, test_size=0.4,random_state=33)
from sklearn.preprocessing import StandardScaler
scalerX = StandardScaler().fit(x_train)
scalery = StandardScaler().fit(y_train)

x_train = scalerX.transform(x_train)
y_train = scalery.transform(y_train)
x_test = scalerX.transform(x_test)
y_test = scalery.transform(y_test)

print np.max(x_train), np.min(x_train), np.mean(x_train), np.max(y_train), np.min(y_train), np.mean(y_train)
然后预测:

y_pred=clf.predict(x_test)

并对预测数据进行了标准化处理。我希望预测的数据是原始格式,我如何才能做到这一点?

您可能希望使用y-scaler的
逆变换方法。请注意,您可以使用管道更简洁地完成这一切,如下所示

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR

pipeline = Pipeline([('scaler', StandardScaler()), ('estimator', SVR(kernel="rbf"))])

y_scaler = StandardScaler()
y_train = y_scaler.fit_transform(y_train)
pipeline.fit(x_train, y_train)
y_pred = y_scaler.inverse_transform(pipeline.predict(x_test))

许多人只是在全球范围内扩展目标,并在没有太多过度拟合的情况下脱身。但是你没有上当受骗,这很好。AFAIK使用单独的y数据定标器(如代码所示)是唯一的方法。

我知道这个问题很老,当时的答案是正确的,但现在有一种scikit学习方法可以做到这一点


正如其他人已经提到的,您应该使用
逆变换()
方法从之前应用的相应转换中检索原始数据。 另一个需要思考的问题是,如果我们的目的是预测实际目标“y”值,为什么需要转换目标
y_测试,y_训练
?在预测过程中,我们不妨让它保持其原始状态

另外(在Python3.7.3、sklearn 0.20.3中),当您像上面那样标准化单列行时(如
y\u test、y\u train
),您会无意中收到作为numpy数组的输出,这对数据帧操作没有帮助

例如:

当您指定输出应该类似于单列数据帧时,您可能会遇到更多问题

例如:

解决方案:必须使用适当的子集选择运算符(.loc/.iloc)在列表中明确声明目标列名/索引

例如:

注意:在live ML项目中,测试数据是将来到达或在模型准备好在产品化阶段进行调整时实时收集的数据


标准化的训练测试功能集,如
X\u-train,X\u-test
有助于轻松比较平均值的特征变化,并有助于正则化主成分分析要求特征变量标准化的技术。

谢谢!,我没有把我的眼睛放在逆_transform()上,真让我感到羞耻。用一个不同的缩放器缩放目标是否至关重要?一个适合于特征的缩放器,假设有多个特征,在缩放一个目标时会出错,因为它需要
n\u特性
dimensionality您是如何找到“解决方案的”@paradoxlover我只是想确保生成的数据结构是一个“数据帧”,因此使用pandas.iloc/.loc函数子集了“y\u train”。