【问题标题】:Tensorflow Keras Model not learning and accuracy extremly lowTensorflow Keras 模型不学习且准确性极低
【发布时间】:2021-10-14 09:55:14
【问题描述】:

我是 ML 新手,我正在尝试构建一个模型来预测一个产品 ID,该模型将来自两个不同产品类别的另一个产品 ID 放入其中。数据如下所示:

Product_A Product_B
14432 91342
14463 2344

我尝试过一次热编码标签和特征,但模型根本没有学习。 它应该如下所示:您将 product1 输入 (0 0 0 1 0 0 0..) 并将 product2 作为标签 (0 1 0 0 0...)。

网络的神经元数量与产品 1 的类别一样多,输出上的神经元数量与第二个产品类别的数量一样多。例如:T 恤(200 个产品) 豆豆(500 个产品)。所以要预测豆豆。我想我应该使用 200 个输入神经元和 500 个输出神经元。

这是我的代码:

def import_data(url):
    dataframe = pd.read_csv(url)
    return dataframe


def prepare_df(dataframe):
    split_data = dataframe['product_ids'].str.split(',', n=1, expand=True)
    split_data = split_data.rename(columns={0: 'Beanie', 1: 'Shirt'})
    split_data = split_data.dropna()
    split_data['Beanie'] = pd.to_numeric(split_data["Beanie"]).astype('category').cat.codes
    split_data['Shirt'] = pd.to_numeric(split_data['Shirt']).astype('category').cat.codes


    return split_data


def create_model():
    my_model = Sequential()
    my_model.add(Input(shape=(127,)))
    my_model.add(Dense(127, activation='sigmoid'))
    my_model.add(Dense(127, activation='sigmoid'))
    my_model.add(Dense(607, activation='sigmoid'))

    return my_model


if __name__ == '__main__':
    data = import_data('data/_Data_Beanies_Shirts_2.csv')

    data = prepare_df(data)

    X = data['Shirt']
    y = data['Beanie']

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

    X_train = to_categorical(X_train)
    X_test = to_categorical(X_test)
    y_train = to_categorical(y_train)
    y_test = to_categorical(y_test)

    optimizer = Adam(learning_rate=0.001)

    model = create_model()

    model.compile(
        loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']
    )
    print("Fit model on training data")
    history = model.fit(
        x=X_train, y=y_train, epochs=100, verbose=1,
        validation_data=(X_test, y_test))

我可能需要像嵌入这样的东西吗?

如果有人可以帮助我,那就太好了。 任何帮助是极大的赞赏! 谢谢!

【问题讨论】:

  • 您是否正在尝试构建推荐系统?
  • 是的,我正在尝试建立一个推荐系统:)
  • 我知道人们讨厌听到这个,但是很多从事机器学习的人有时需要听到它。神经网络并不是万能的!更简单的模型有时更强大,并取得更好的结果。也许看看这个教程(scikit-learn 部分):towardsdatascience.com/…
  • 是的,我知道,但我必须为这个项目使用神经网络来构建它。但是感谢您的文章:)

标签: python tensorflow keras tf.keras recommender-systems


【解决方案1】:

一方面,我认为您无法预测 ID。这没有多大意义。这有点像试图预测人的名字。另一方面,尝试其他模型。考虑到输入的数据,不同的模型或算法会以不同的方式学习。尝试这些模型中的每一个......你会学到很多东西!!

Linear Regression
Logistic Regression
Decision Tree
SVM
Naive Bayes
kNN
K-Means
Random Forest
Dimensionality Reduction Algorithms
Gradient Boosting algorithms
    GBM
    XGBoost
    LightGBM
    CatBoost

有关如何开始的一些想法,请参阅下面的链接。

https://scikit-learn.org/stable/supervised_learning.html

https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/

【讨论】:

  • 感谢您提供此建议。