TensorFlow机器学习 - 对用户输入进行预测

3
我正在处理一个涉及两个类别的分类问题。我需要在数据集上训练模型,并在将每个属性的一个值作为输入后预测正确的类别。以下是数据集的一部分。类别是 01enter image description here 以下是我用于训练和测试模型的代码:
X = df.drop(["classification"], axis=1)
y = df["classification"]

x_scaler = MinMaxScaler()
x_scaler.fit(X)
column_names = X.columns
X[column_names] = x_scaler.transform(X)

X_train,  X_test, y_train, y_test = train_test_split(
        X, y, test_size= 0.2, shuffle=True)

我尝试从用户那里获取输入,方式如下:

userInput=input("Enter 14 attributes separated by commas")
#userInput=userInput.split(",")
#userInput=[np.float32(c) for c in userInput]

并使用以下方法进行预测:

pred=model.predict(userInput)

但是我收到了以下报错信息:

AttributeError: 'str'对象没有属性 'ndim'

我也尝试手动输入这些属性:
prediction=np.array([40,8,1,2,0,2,6,10,34,40,16,23,67,25])
print(prediction.shape) # Shape is (14,)
print(prediction[0].shape) # Shape is ()
print(prediction[0:1].shape) #Shape is (1,)
print(X_test[0:1].shape) #Shape is (1, 14)

通过一些方法进行预测,比如:

  (1) pred = model.predict(x=np.array(prediction[0:1].shape))
  (2) pred = model.predict(x=np.array(prediction[0].shape))
  (3) pred = model.predict(prediction)
  (4) pred = model.predict([40,8,1,2,0,2,6,10,34,40,16,23,67,25])
  (5) pred = model.predict(prediction.shape)
  (6) pred = model.predict([40],[8],[1],[2],[0],[2],[6],[10],[34],[40],[16],[23],[67],[25])

但在1到4情况下,我遇到了以下错误:

ValueError: 在检查输入时出错:预期dense_1_input具有形状(14,),但得到形状为(1,)的数组

而在第5和第6种情况下分别遇到以下错误:

AttributeError:'tuple'对象没有属性'ndim'
TypeError:predict()接受2到9个位置参数,但提供了15个

此外,我尝试运行以下内容,它可以正常工作:

pred=model.predict(X_test)

但是这个预测没有任何意义。我尝试了:
(1) print(np.argmax(pred(userInput)))
(2) print(np.argmax(pred(prediction)))

使用.shape也不起作用,并出现以下错误:

TypeError: 'list' object is not callable

训练数据的形状为:(320,14) 测试数据的形状为:(80,14)

有没有办法从用户那里获取输入,并将其用于预测?

1个回答

1
当您使用pred=model.predict(userInput)进行预测时,会出现错误AttributeError: 'str' object has no attribute 'ndim',因为您正在向函数传递一个字符串。您需要拆分从终端读取的字符串并将字符串转换为整数。
inputString = "1, 2, 3,4"
sample = inputString.replace(" ", "").split(",")
sample = [int(x) for x in sample]
print(sample)
[1, 2, 3, 4]

对于预测,尝试将样本作为参数传递给predict方法:

pred = model.predict([[40,8,1,2,0,2,6,10,34,40,16,23,67,25]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接