Линейная регрессия, смехотворно высокая потеря - PullRequest
0 голосов
/ 28 сентября 2018
import pandas as pd
import matplotlib.pyplot as plt

csv = 'C:\\Users\\Alex\\Downloads\\weight-height.csv'

df = pd.read_csv(csv)
df.head

x_train = df['Height'].values
#into centimetres because im english
x_train = x_train * 2.54
y_train = df['Weight'].values
#into kilos because im english
y_train = y_train / 2.2046226218

plt.figure()
plt.scatter(x_train, y_train, c=None)
plt.show()
print(X[:10])
print(y[:10])

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
import numpy as np

X = np.array(x_train).reshape(-1,1)
y = np.array(y_train).reshape(-1,1)

X = X[:5000]
y = y[:5000]

model = Sequential()
model.add(Dense(36, activation='relu'))
model.add(Dense(18))
model.add(Dense(1))

model.compile(optimizer='adam',
              loss='mean_squared_error',
              metrics=['accuracy'])

history = model.fit(X,y, batch_size=1, epochs=1, validation_split=0.1)

#plt.plot(history.history['acc'])
#plt.plot(history.history['val_acc'])

Моя проблема в основном в том, что я новичок, и я пытаюсь создать свою собственную модель линейной регрессии с нуля, используя керасы, и я не могу понять, почему моя потеря так высока.Мне нужно знать, использую ли я оптимизатор или функцию потерь, или проблему с данными.Набор данных - это просто список весов и высот.

1 Ответ

0 голосов
/ 28 сентября 2018

Я бы попробовал:

  1. Нормализация ваших высот и веса так, чтобы максимум каждого был один.Глубокое обучение, как правило, легче, когда ценности около одного.Очевидно, что вам нужно выполнить то же деление с вашими тестовыми данными, а затем умножить ответы на ту же сумму в конце.

  2. Изменение вашей метрики на «mse» или «mae»средняя квадратическая ошибка или средняя ошибка абс).Это не изменит вашу потерю, но заставит вас чувствовать себя лучше, так как это более значимый показатель того, насколько хорошо вы делаете.

Попробуйте это:

x_train = df['Height'].values
x_train = x_train * 2.54
x_train = x_train / 175.0

y_train = df['Weight'].values
y_train = y_train / 2.2046226218
y_train = y_train / 80.0

...

model.compile(optimizer='adam',
          loss='mean_squared_error',
          metrics=['mse'])

И для проверки некоторых новых значений

x_test = 187
x_test = np.array(x_test).reshape(-1,1)
x_test = x_test * 2.54
x_test = x_test / 175.0
pred = model.predict(x_test)
pred = pred * 80.0
...