预测以下内容的最佳算法/解决方案是什么?

数据挖掘 Python 预测建模 熊猫 决策树 scipy
2021-10-09 19:01:55

我有一个包含 76 个国家和 6 列不同定量变量的数据集,这些变量是该变量相对于每个国家的平均值:

在此处输入图像描述

如果我要随机抽取 6 个变量的样本——其中一个国家的个人——我将如何最好地预测该个人属于哪个国家?

我有一个完全独立的数据集,有数千个数据点,所以我知道数据属于哪个国家,从而可以确定算法是否准确预测。

到目前为止,我一直在研究决策树和随机森林选项,但我所见过的示例用例都没有很好地转化为我正在尝试做的事情。也许我找错地方了。

它不是预测行为,因为行为是已知的……更多的是预测行为属于哪个国家/地区分类。想法?评论?

3个回答

确实非常有趣的问题。

我敢给你一个答案,但如果我在查看数据后找到更好的问题推理,我可能会改变它。

您的问题可能是多(多)标签分类问题,您的标签是国家,而您的数据是您所拥有的“耐心”、“冒险”等。

您可以使用随机森林或决策树,但要使用包含所有个人的数据集(不是按国家/地区汇总的)。

为什么在这个数据集上而不是在摘要上?因为汇总是汇总(!),并且只有“冒险”(例如)平均值的数据,没有考虑国家内部冒险的内部方差。

考虑到这一点很重要,因为冒险可能一个国家内部具有如此大的差异,这使得变量对于选择一个人的国籍毫无意义,而这在汇总数据库中没有看到。

如果必须首先在汇总数据集中运行模型,则解决方案如下:

  • 您应该运行node_size参数为1的树,因为您的汇总数据集具有“每个标签一个人(国家)”,这是一个极端情况,您需要每个国家/地区的节点叶。

查看描述,我将采用“基于距离”的方法。首先,我会为每个国家/地区制作六个变量的原型(汇总表可能是一个示例,但每个国家/地区可能有不止一个原型)。然后,为了将数据分配给给定的国家,我将遵循 k-最近或类似的方法。尽管如此,生产原型并不是必须使用 k-nearest。它只有助于描述每个国家的特征。为了根据原型进行分类,监督自组织图 (SOM) 可能是一种很好的方法,但径向基函数神经网络 (RNN) 也可以工作。概率神经网络 (PNN) 将是一种选择,尽管它们不提供原型。

SVM.SVC() 模型是一个不错的选择,但显然有不止一个选择。https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC

我将“目标”值设置为数据集中包含的国家,然后使用 label_encoder 作为定量变量进行标记 (1-76)。

定义模型后,我可以通过“clf.predict”6 个变量输入并获得预测结果。显然,这个模型无法在第一时间做出准确的预测,但我们会继续努力。

我有兴趣获得更多关于如何实施这个问题的想法,并比较不同的方法并改进它们。谢谢!

X = df[['patience','risktaking','posrecip','negrecip','altruism','trust']].values 
Y = df[['target']].values

label_encoder = LabelEncoder()
Y = label_encoder.fit_transform(Y)

X_train , X_test, y_train, y_test = train_test_split(X,Y)
clf = SVC(C=1.0, kernel='rbf').fit(X_train,y_train)

prediction = int(clf.predict([[2.2529752, 2.466159, 0.95989114, -1.5864599, 0.47468176, 0.9504338]]))