![](/img/trans.png)
[英]Interpreting the effect of LK Norm with different orders on training machine learning model with the presence of outliers
[英]Training machine learning model for ecommerce customer/orders models
我有以下数据集:
| customer | item | number_of_orders |
| 1 | 1 | 1 |
| 1 | 2 | 0 |
| 1 | 3 | 0 |
| 1 | 4 | 1 |
| 2 | 1 | 0 |
| 2 | 2 | 0 |
| 2 | 3 | 0 |
| 2 | 4 | 1 |
...
我试图得出结论,如果用户 X 将订购项目 Y 作为第一步。
这是我到目前为止的代码
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=7)
model.fit(X_train, Y_train)
predictions = model.predict(X_test)
result = accuracy_score(Y_test, predictions)
result
它提供了非常高的准确性,但我怀疑它与number_of_orders
数据集中的大量零有关。
有人可以建议如何改进这个 ML 模型吗?
我也有关于价格和商品数量以及每件商品的平均价格的信息,我也想使用这些信息。
我的最终目标是根据这些数据创建一个推荐系统,根据其他订单返回推荐列表。
首先,我建议将您的评估方法更改为加权 F1 分数https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html - 确保选择“加权”选项以解决标签不平衡问题. 这个分数非常适合您的问题。
其次,我会尝试一些其他模型,KNN 是一个好的开始,但它可能无法找到合适的决策边界来分离您的问题。 也许尝试随机森林和/或新的 histgradientboostingclassifier(类似于 lightgbm 方法)。
您也可以尝试重新表述您的问题并尝试将其解决为推荐问题,也许您可以使用一些矩阵分解技术,这似乎非常有用,因为您发布的格式中的数据通常非常稀疏(很多 0)。
那里可能有很多零! 使用下面的一小段代码示例来查找数据集中零的百分比。
df_missing = df.isna()
df_num_missing = df_missing.sum()
print(df_num_missing / len(df))
print(df.isna().mean().round(4) * 100)
我不知道您的阈值是多少,但我推测如果 50% 或更多为零,那将是一个非常无用的功能。 您可以采用非零记录的子集。
df.drop(df[df['number_of_orders'] == 0].index,inplace=True)
试试看,看看你们相处得如何。 另外,试试其他人的建议。 一些算法在处理零、空值等方面非常聪明。我相信随机森林(回归和分类)非常强大,即使数据集大部分是垃圾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.