だから、私はこの疑問を抱いていて、答えを探していました。質問は私が使用するときです
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
df = pd.DataFrame({'A':[1,2,3,7,9,15,16,1,5,6,2,4,8,9],'B':[15,12,10,11,8,14,17,20,4,12,4,5,17,19],'C':['Y','Y','Y','Y','N','N','N','Y','N','Y','N','N','Y','Y']})
df[['A','B']] = min_max_scaler.fit_transform(df[['A','B']])
df['C'] = df['C'].apply(lambda x: 0 if x.strip()=='N' else 1)
その後、モデルのトレーニングとテストを行い(機能としてA
、B
、ラベルとしてC
)、精度スコアを取得します。私の疑問は、新しいデータセットのラベルを予測しなければならないときに何が起こるかということです。いう、
df = pd.DataFrame({'A':[25,67,24,76,23],'B':[2,54,22,75,19]})
列を正規化すると、A
とB
の値は、モデルがトレーニングされるデータではなく、新しいデータに従って変更されるためです。だから、今、私のデータは次のようなデータ準備ステップの後です。
data[['A','B']] = min_max_scaler.fit_transform(data[['A','B']])
A
とB
の値は、df[['A','B']]
のMax
とMin
の値に対して変化します。 df[['A','B']]
のデータ準備は、Min Max
of df[['A','B']]
に関するものです。
さまざまな数の関連に関して、データの準備はどのように有効ですか?ここで予測がどのように正しくなるかわかりません。
MinMaxScaler
データを使用してtraining
を近似し、予測の前にtesting
データにスケーラーを適用する必要があります。要約:
scaler
をTRAINING data
に合わせるscaler
をtransform the training data
に使用しますtransformed training data
からfit the predictive model
を使用するscaler
をtransform the TEST data
に使用するtrained model
およびtransformed TEST data
を使用したpredict
データを使用した例:
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
#training data
df = pd.DataFrame({'A':[1,2,3,7,9,15,16,1,5,6,2,4,8,9],'B':[15,12,10,11,8,14,17,20,4,12,4,5,17,19],'C':['Y','Y','Y','Y','N','N','N','Y','N','Y','N','N','Y','Y']})
#fit and transform the training data and use them for the model training
df[['A','B']] = min_max_scaler.fit_transform(df[['A','B']])
df['C'] = df['C'].apply(lambda x: 0 if x.strip()=='N' else 1)
#fit the model
model.fit(df['A','B'])
#after the model training on the transformed training data define the testing data df_test
df_test = pd.DataFrame({'A':[25,67,24,76,23],'B':[2,54,22,75,19]})
#before the prediction of the test data, ONLY APPLY the scaler on them
df_test[['A','B']] = min_max_scaler.transform(df_test[['A','B']])
#test the model
y_predicted_from_model = model.predict(df_test['A','B'])
虹彩データを使用した例:
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVC
data = datasets.load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
model = SVC()
model.fit(X_train_scaled, y_train)
X_test_scaled = scaler.transform(X_test)
y_pred = model.predict(X_test_scaled)
お役に立てれば。
最適な方法は、トレーニングしてMinMaxScalerモデルを保存し、必要なときに同じモデルをロードすることです。
保存モデル:
df = pd.DataFrame({'A':[1,2,3,7,9,15,16,1,5,6,2,4,8,9],'B':[15,12,10,11,8,14,17,20,4,12,4,5,17,19],'C':['Y','Y','Y','Y','N','N','N','Y','N','Y','N','N','Y','Y']})
df[['A','B']] = min_max_scaler.fit_transform(df[['A','B']])
pickle.dump(min_max_scaler, open("scaler.pkl", 'wb'))
保存したモデルの読み込み:
scalerObj = pickle.load(open("scaler.pkl", 'rb'))
df_test = pd.DataFrame({'A':[25,67,24,76,23],'B':[2,54,22,75,19]})
df_test[['A','B']] = scalerObj.transform(df_test[['A','B']])