sample_weightパラメータをGridSearchCVに渡すと、形状が正しくないためにエラーが発生します。私の疑問は、クロスバリデーションはデータセットに応じてsample_weightsの分割を処理できないということです。sample_weight scikit-learn GridSearchCVのパラメータ形状エラー
最初の部分:
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
dataURL = 'https://raw.githubusercontent.com/mcasl/PAELLA/master/data/sinusoidal_data.csv'
x = pd.read_csv(dataURL, usecols=["x"]).x
y = pd.read_csv(dataURL, usecols=["y"]).y
occurrences = pd.read_csv(dataURL, usecols=["Occurrences"]).Occurrences
my_sample_weights = (1 - occurrences/10000)**3
my_sample_weights
は、私はX、Yの各観測に割り当てる重要性が含まれています。モデルパラメータとしてsample_weightを使用するのがGridSearchなく、第1、簡単な例を考えてみましょう美しく
作品次の図に示すように、正弦曲線のポイントは、バックグラウンドノイズを形成するポイントよりも高い重みを得る。
plt.scatter(x, y, c=my_sample_weights>0.9, cmap="cool")
のは、最初のmy_sample_weights
に含まれる情報を用いずに、ニューラルネットワークを訓練してみましょう:以下の絵が示すように
def make_model(number_of_hidden_neurons=1):
model = Sequential()
model.add(Dense(number_of_hidden_neurons, input_shape=(1,), activation='tanh'))
model.add(Dense(1, activation='linear'))
model.compile(optimizer='sgd', loss='mse')
return model
net_Not_using_sample_weight = make_model(number_of_hidden_neurons=6)
net_Not_using_sample_weight.fit(x,y, epochs=1000)
plt.scatter(x, y,)
plt.scatter(x, net_Not_using_sample_weight.predict(x), c="green")
は、ニューラルネットワークはの形に合うようにしよう正弦波であるが、バックグラウンドノイズは良好なフィット感を妨げる。
ここで、my_sample_weights
の情報を使用すると、予測の品質がはるかに優れています。
第二部分:GridSearchCVパラメータは、エラーパラメータは、次のエラーを与えるようsample_weightsを渡そうとし
my_Regressor = KerasRegressor(make_model)
validator = GridSearchCV(my_Regressor,
param_grid={'number_of_hidden_neurons': range(4, 5),
'epochs': [500],
},
fit_params={'sample_weight': [ my_sample_weights ]},
n_jobs=1,
)
validator.fit(x, y)
を上げるようsample_weightを使用する:
...
ValueError: Found a sample_weight array with shape (1000,) for an input with shape (666, 1). sample_weight cannot be broadcast.
それはsample_weightようですベクトルは入力配列と同様に分割されていません。価値がある何のため
:
import sklearn
print(sklearn.__version__)
0.18.1
import keras
print(keras.__version__)
2.0.5