预测以下内容的最佳算法/解决方案是什么?
确实非常有趣的问题。
我敢给你一个答案,但如果我在查看数据后找到更好的问题推理,我可能会改变它。
您的问题可能是多(多)标签分类问题,您的标签是国家,而您的数据是您所拥有的“耐心”、“冒险”等。
您可以使用随机森林或决策树,但要使用包含所有个人的数据集(不是按国家/地区汇总的)。
为什么在这个数据集上而不是在摘要上?因为汇总是汇总(!),并且只有“冒险”(例如)平均值的数据,没有考虑国家内部冒险的内部方差。
考虑到这一点很重要,因为冒险可能在一个国家内部具有如此大的差异,这使得变量对于选择一个人的国籍毫无意义,而这在汇总数据库中没有看到。
如果必须首先在汇总数据集中运行模型,则解决方案如下:
- 您应该运行
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]]))