web-dev-qa-db-ja.com

回帰用のニューラルネットワークを作成する方法

Kerasを使用してニューラルネットワークを作成しようとしています。私が使用しているデータは https://archive.ics.uci.edu/ml/datasets/Yacht+Hydrodynamics です。私のコードは次のとおりです:

import numpy as np
from keras.layers import Dense, Activation
from keras.models import Sequential
from sklearn.model_selection import train_test_split

data = np.genfromtxt(r"""file location""", delimiter=',')

model = Sequential()
model.add(Dense(32, activation = 'relu', input_dim = 6))
model.add(Dense(1,))
model.compile(optimizer='adam', loss='mean_squared_error', metrics = ['accuracy'])

Y = data[:,-1]
X = data[:, :-1]

ここから、model.fit(X、Y)を使用してみましたが、モデルの精度は0のままです。Kerasは初めてなので、これはおそらく簡単な解決策です。

私の質問は、精度を高めるためにモデルに回帰を追加する最良の方法は何ですか?前もって感謝します。

6
ES1927

まず、datasettrain_test_splitクラスからsklearn.model_selectionクラスを使用してtrainingセットとtestセットに分割する必要があります_ 図書館。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.08, random_state = 0)

また、scaleクラスを使用して値をStandardScalerする必要があります。

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

次に、より良い結果を得るために、さらにlayersを追加する必要があります。

通常、必要なhiddenlayersの総数を調べるには、次の式を適用することをお勧めします。

Nh = Ns/(α∗ (Ni + No))

どこ

  • Ni =入力ニューロンの数。
  • いいえ=出力ニューロンの数。
  • Ns =トレーニングデータセットのサンプル数。
  • α=通常2から10の任意の倍率。

したがって、分類子は次のようになります。

# Initialising the ANN
model = Sequential()

# Adding the input layer and the first hidden layer
model.add(Dense(32, activation = 'relu', input_dim = 6))

# Adding the second hidden layer
model.add(Dense(units = 32, activation = 'relu'))

# Adding the third hidden layer
model.add(Dense(units = 32, activation = 'relu'))

# Adding the output layer
model.add(Dense(units = 1))

使用するmetric- metrics=['accuracy']は、classificationの問題に対応しています。 regressionを実行する場合は、metrics=['accuracy']を削除します。つまり、使用するだけです

model.compile(optimizer = 'adam',loss = 'mean_squared_error')

ここregressionおよびclassificationkerasメトリックのリストです

また、epochsメソッドのbatch_sizeおよびfit値を定義する必要があります。

model.fit(X_train, y_train, batch_size = 10, epochs = 100)

enter image description here

networkをトレーニングしたら、X_testメソッドを使用してpredictmodel.predictの結果を取得できます。

y_pred = model.predict(X_test)

これで、ニューラルネットワーク予測から取得したy_predと、realデータであるy_testを比較できます。このため、plotライブラリを使用してmatplotlibを作成できます。

plt.plot(y_test, color = 'red', label = 'Real data')
plt.plot(y_pred, color = 'blue', label = 'Predicted data')
plt.title('Prediction')
plt.legend()
plt.show()

ニューラルネットワークは非常によく学習しているようです

これがplotの外観です。 enter image description here

ここに完全なコードがあります

import numpy as np
from keras.layers import Dense, Activation
from keras.models import Sequential
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# Importing the dataset
dataset = np.genfromtxt("data.txt", delimiter='')
X = dataset[:, :-1]
y = dataset[:, -1]

# Splitting the dataset into the Training set and Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.08, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Initialising the ANN
model = Sequential()

# Adding the input layer and the first hidden layer
model.add(Dense(32, activation = 'relu', input_dim = 6))

# Adding the second hidden layer
model.add(Dense(units = 32, activation = 'relu'))

# Adding the third hidden layer
model.add(Dense(units = 32, activation = 'relu'))

# Adding the output layer

model.add(Dense(units = 1))

#model.add(Dense(1))
# Compiling the ANN
model.compile(optimizer = 'adam', loss = 'mean_squared_error')

# Fitting the ANN to the Training set
model.fit(X_train, y_train, batch_size = 10, epochs = 100)

y_pred = model.predict(X_test)

plt.plot(y_test, color = 'red', label = 'Real data')
plt.plot(y_pred, color = 'blue', label = 'Predicted data')
plt.title('Prediction')
plt.legend()
plt.show()
20