Python 机器学习预测-无法将NumPy数组转换为张量
我有一个电影评级预测的问题,我正试图解决我的个人机器学习实践。 我有2个csv文件。一个有电影(电影ID、标题、类型),另一个有收视率(用户ID、电影ID、收视率、时间戳) 在做了一些数据预处理之后,将单词嵌入应用于电影标题,并对流派进行了一次热编码,然后对我的最终数据帧进行洗牌Python 机器学习预测-无法将NumPy数组转换为张量,python,tensorflow,machine-learning,word-embedding,Python,Tensorflow,Machine Learning,Word Embedding,我有一个电影评级预测的问题,我正试图解决我的个人机器学习实践。 我有2个csv文件。一个有电影(电影ID、标题、类型),另一个有收视率(用户ID、电影ID、收视率、时间戳) 在做了一些数据预处理之后,将单词嵌入应用于电影标题,并对流派进行了一次热编码,然后对我的最终数据帧进行洗牌 userId movieId rating embeddings genres 0 545 2020 5.0 [0.081246674, 0.046522498, -0.
userId movieId rating embeddings genres
0 545 2020 5.0 [0.081246674, 0.046522498, -0.014943261, 0.025... [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...
1 427 3186 2.0 [0.09334839, 0.057055157, -0.020527517, 0.0301... [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...
2 102 2144 3.0 [0.062349755, 0.04466611, -0.011009981, 0.0187... [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
3 30 5927 4.0 [0.18021354, 0.119208135, -0.036116328, 0.0466... [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, ...
4 537 1022 3.0 [0.026805451, 0.025356086, -0.004603084, 0.013... [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ...
... ... ... ... ... ...
之后,我尝试将数据拆分为X和y,并应用列车测试拆分
X = df_ratings.drop(['rating'], axis=1).values
y = df_ratings['rating'].values
试图:
X = np.asarray(X).astype('float32')
y = np.asarray(y).astype('float32')
TypeError Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
ValueError Traceback (most recent call last)
<ipython-input-46-ee1241369db7> in <module>
----> 1 X = np.asarray(X).astype('float32')
2 y = np.asarray(y).astype('float32')
ValueError: setting an array element with a sequence
我创建了我的模型(我不知道这是否完全正确),并尝试将我的列车数据拟合到模型中
def movies_model():
model = Sequential()
# Add layers
model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation="linear"))
return model
optimizer = tf.keras.optimizers.Adam()
model.compile(optimizer=optimizer, loss='mean_absolute_error')
history = model.fit(X_train, y_train, epochs=10, batch_size=1024, verbose=1)
我遇到了这个错误:
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).
嵌入和类型为numpy.ndarray类型
我寻找了一个提示,但没有结果。
如果你能帮我找出错误的来源,我将不胜感激。(我还尝试将嵌入和类型转换为其他类型)
df.info()
范围索引:100004个条目,0到100003
数据列(共5列):
#列非空计数数据类型
--- ------ -------------- -----
0用户标识100004非空int64
1电影ID 100004非空int64
2额定值100004非零浮点64
3嵌入100004非空对象
4种类型100004非空对象
数据类型:float64(1)、int64(2)、object(2)
在分割数据之前,请尝试此操作
import numpy as np
X = np.asarray(X).astype(dtype=np.float32)
y = np.asarray(y).astype(dtype=np.float32)
编辑:
用额外的输入尺寸去除额外的致密层
def movies_model():
model = Sequential()
# Add layers
model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation="linear"))
return model
我也尝试过这个,但我得到了这个错误(添加在问题上)@kostas_math请包括在首字母上添加的错误question@kostas_math您还可以包括
X
和y
的形状吗?是的,X:(100004,4),y:(100004,)张贴所有列的数据类型,其中所有列都是pandas.core.series.series。此外,每个嵌入值的类型为numpy.ndarray。我将在问题上添加一小部分。您可以使用df.info()查找问题上的数据类型。我认为您错误地将输入添加到了前两层。它必须仅位于第一层
import numpy as np
X = np.asarray(X).astype(dtype=np.float32)
y = np.asarray(y).astype(dtype=np.float32)
def movies_model():
model = Sequential()
# Add layers
model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation="linear"))
return model