sklearn 预处理 MinMaxScaler

数据挖掘 机器学习 Python scikit-学习 时间序列 回归
2022-03-14 00:08:08

我正在阅读一篇关于提高神经网络性能的machinelearningmastery.com 帖子,并且我正在尝试使用 sklearn 预处理 MinMaxScaler 使用帖子中提到的技巧来规范化我自己的数据集。

在我的代码中,我将一个 CSV 文件直接读入 pandas。

#read CSV file
df = pd.read_csv('C:\\Users\\desktop\\EC\\data.csv', index_col='Date', parse_dates=True)

下面的片段是带有列名的数据的样子: 在此处输入图像描述

从帖子中,我使用下面的代码对数据进行规范化。该过程似乎只返回一个 numpy 数组,但我在机器学习拟合过程中使用 Pandas。

from sklearn.preprocessing import MinMaxScaler

# create scaler
scaler = MinMaxScaler()

# fit and transform in one step
df2 = scaler.fit_transform(df)

df2 = pd.DataFrame(df2)

发生了什么,是我的列名被删除了,我在删除和选择中使用了很多列名。例如,我拟合了很多类似下面这个过程的模型来区分目标变量和输入变量。

#Test random Forest

import numpy as np
from sklearn import preprocessing, cross_validation, neighbors
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.externals import joblib
import math

rmses = []
for i in range(2):

    X = np.array(df2.drop(['Demand'],1))
    y = np.array(df2['Demand'])

    offset = int(X.shape[0] * 0.7)
    X_train, y_train = X[:offset], y[:offset]
    X_test, y_test = X[offset:], y[offset:]

    clf = RandomForestRegressor(n_estimators=120, min_samples_split=20)

    clf.fit(X_train, y_train)
    mse = mean_squared_error(y_test, clf.predict(X_test))
    rmse = math.sqrt(mse)
    print("rmse: %.4f" % rmse)
    rmses.append(rmse)

print(sum(rmses)/len(rmses))

joblib.dump(clf, 'rfrModel.pkl')

但也许这不是一个投标交易......对不起,这里没有很多智慧,任何提示都有帮助。还有另一种我不需要依赖列名的疯狂方法吗?如果df2 = scaler.fit_transform(df)留下列但只是删除名称,我可以只使用列号来.drop区分目标和输入变量..Demand是我的目标变量的名称,我可以调用第二列......,对吗?

在此处输入图像描述

1个回答

您可以只使用以前的列名来创建新的数据框

# Use the previous column names from df and assign it to df2   
df2 = pd.DataFrame(df2, columns=df.columns)