【问题标题】:Using a trained Keras model to make predictions on new csv data使用经过训练的 Keras 模型对新的 csv 数据进行预测
【发布时间】:2020-05-04 23:00:13
【问题描述】:

所以我正在做一个项目,基本上我必须预测房价是高于还是低于其中位价,为此,我使用了来自 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 文件进行预测,并确定每个文件是否高于或低于中位数价格。这是 VSCode 中 csv 文件的图像,我希望它对其进行预测: csv file image 如您所见,此文件不包含 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 行。有谁知道我如何解决这个问题并能够预测 csv 文件中每一行的 1 或 0? 谢谢!

【问题讨论】:

    标签: python tensorflow machine-learning keras neural-network


    【解决方案1】:

    我知道你想要什么! 我们试试吧 !这段代码对我有用

     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,因为你使用了 sigmoid 函数来确定概率预测 所以 if(y_pred>0.5) 它的平均值是 1

      #True rep one
    
      #false rep zero
    
      #you can use replace function or map function of pandas  to get convert true 
     into 1
    

    【讨论】:

    • 感谢您如此迅速地回复,但我认为我的问题可能不是很清楚。我已经对其进行了编辑,使其更简洁,并且我还尝试了您给我的解决方案,但它似乎不起作用。你能告诉我我做错了什么吗?谢谢!
    • 我会尽快把这段代码上传到github上
    • 嘿伙计们,任何人都可以看看我的这个新问题,看看你能不能回答? stackoverflow.com/questions/60367118/…
    猜你喜欢
    • 2017-03-13
    • 2020-07-04
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2017-07-16
    • 2021-09-26
    • 2017-05-11
    相关资源
    最近更新 更多