Использование обученной модели Keras для прогнозирования новых данных CSV - PullRequest
0 голосов
/ 18 января 2020

, поэтому я делаю проект, в котором в основном я должен предсказать, будет ли цена дома выше или ниже ее средней цены, и для этого я использую этот набор данных из Kaggle (https://drive.google.com/file/d/1GfvKA0qznNVknghV4botnNxyH-KvODOC/view). 1 означает «выше среднего», а 0 означает «ниже среднего». Я написал этот код для обучения нейронной сети и сохранения его в виде файла .h5:

import pandas as pd
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
import h5py

df = pd.read_csv('housepricedata.csv')
dataset = df.values

X = dataset[:,0:10]
Y = dataset[:,10]

min_max_scaler = preprocessing.MinMaxScaler()

X_scale = min_max_scaler.fit_transform(X)

X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)

model = Sequential([
    Dense(32, activation='relu', input_shape=(10,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid'),
])

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=['accuracy'])

hist = model.fit(X_train, Y_train,
          batch_size=32, epochs=100,
          validation_data=(X_val, Y_val))

model.save("house_price.h5")

После запуска он успешно сохраняет файл .h5 в моем каталоге. Сейчас я хочу использовать мою обученную модель, чтобы делать прогнозы для нового файла .csv и определять, выше или ниже каждый из них выше средней цены. Это изображение файла csv в VSCode, для которого я хочу, чтобы он делал прогнозы: изображение файла csv Как видите, этот файл не содержит 1 (выше медианы) или 0 (ниже медианы) ) потому что именно это я и хочу предсказать. Вот код, который я написал для этого:

import pandas as pd
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
from keras.models import load_model
import h5py

df = pd.read_csv('data.csv')
dataset = df.values

X = dataset[:,0:10]
Y = dataset[:,10]

min_max_scaler = preprocessing.MinMaxScaler()

X_scale = min_max_scaler.fit_transform(X)

X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)

model = load_model("house_price.h5")

y_pred = model.predict(X_test)

print(y_pred)

Это вывод [[0.00101464]] Я понятия не имею, что это такое и почему он возвращает только одно значение, даже если файл CSV имеет 4 строки. Кто-нибудь знает, как я могу это исправить и быть в состоянии предсказать 1 или 0 для каждой строки в файле CSV? Спасибо!

1 Ответ

0 голосов
/ 18 января 2020

Столько, сколько я понимаю, что вы хотите! Давай попробуем ! Этот код работает для меня

 import tensorflow
 model = tensorflow.keras.models.load_model("house_price.h5")
 y_pred=model.predict(X_test)

, но вы не можете перейти на следующий сайт 1: answer1 2: answer2

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('C:\\Users\\acer\\Downloads\\housepricedata.csv')
dataset.head()

X=dataset.iloc[:,0:10]
y=dataset.iloc[:,10]

X.head()
from sklearn.preprocessing import StandardScaler
obj=StandardScaler()
X=obj.fit_transform(X)

from sklearn.model_selection import train_test_split
 X_train,X_test,y_train,y_test=train_test_split
                                        (X,y,random_state=2020,test_size=0.25)

  print(X_train.shape)
  print(X_test.shape)
  print(y_train.shape)
  print(y_test.shape)

  import keras
  from keras.models import Sequential
  from keras.layers import Dense
  from keras.layers import Dropout
  classifier = Sequential()

    # Adding the input layer and the first hidden layer
  classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 
                                                      'relu', input_dim = 10))
   # classifier.add(Dropout(p = 0.1))

   # Adding the second hidden layer
   classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation 
                                                                   = 'relu'))
   # classifier.add(Dropout(p = 0.1))

   # Adding the output layer
   classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation 
                                                               = 'sigmoid'))

       # Compiling the ANN
  classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics 
                                                          = ['accuracy'])

  classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)
  y_pred = classifier.predict(X_test)
  y_pred = (y_pred > 0.5)
  print(y_pred)

  classifier.save("house_price.h5")

  import tensorflow
  model = tensorflow.keras.models.load_model("house_price.h5")
  y_pred=model.predict(X_test)
  y_pred = (y_pred > 0.5)
  print(y_pred)

Оба y_pred выдают для меня одинаковые выходные данные

Здесь одна вещь, которую вы не y_pred, не содержит 0 и 1, потому что вы используете сигмовидную функцию, которая определяет предикацию по вероятности, поэтому если (y_pred> 0.5), это среднее значение равно единице

  #True rep one

  #false rep zero

  #you can use replace function or map function of pandas  to get convert true 
 into 1
...