Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 训练什么机器学习算法来使用特征权重作为决策树的输出?_Python_Machine Learning_Scikit Learn_Gradient Descent - Fatal编程技术网

Python 训练什么机器学习算法来使用特征权重作为决策树的输出?

Python 训练什么机器学习算法来使用特征权重作为决策树的输出?,python,machine-learning,scikit-learn,gradient-descent,Python,Machine Learning,Scikit Learn,Gradient Descent,我有一个纯粹的分类数据集,具有非常不平衡的类权重(1:99) 我想训练一个模型,该模型将计算所述特征的每个特征和值,以及它对预测的重要性。因此,本质上要生成一个类似dict的对象: vocabulary = { 'user=12345': 0, 'user=67890': 1, 'age=30': 2, 'age=40': 3, 'geo=UK': 4, 'geo=DE': 5, 'geo=US': 6, 'geo=BR': 7} 然后对其进行重视: weights = [.1, .2, .1

我有一个纯粹的分类数据集,具有非常不平衡的类权重(1:99)

我想训练一个模型,该模型将计算所述特征的每个特征和值,以及它对预测的重要性。因此,本质上要生成一个类似dict的对象:

vocabulary = {
'user=12345': 0,
'user=67890': 1,
'age=30': 2,
'age=40': 3,
'geo=UK': 4,
'geo=DE': 5,
'geo=US': 6,
'geo=BR': 7}
然后对其进行重视:

weights = [.1, .2, .15, .25, .1, .1, .2, .2]
我应该使用哪种基于python的机器学习库,以及库中算法的哪些建议,这些建议允许我提取上述输出

我试过了;tensorflow线性回归器,scikit学习线性回归器和graphlab增强树。增强的树似乎最有希望,但如果可能的话,我想使用一个开源库

提前非常感谢大家

更新:


GradientBoostingClassifier
由于不平衡的类而产生
0.999137901985
分数。

在不太了解潜在问题的情况下,
sklearn.employee.RandomForestClassifier
sklearn.employee.GradientBoostingClassifier
生成功能重要性,并且可能很容易用于大多数目的。以下是有关Iris样本数据的简单示例:

In [79]: from sklearn.datasets import load_iris

In [80]: from sklearn.ensemble import GradientBoostingClassifier

In [81]: gbm.fit(load_iris()["data"], load_iris()["target"])
Out[81]:
GradientBoostingClassifier(init=None, learning_rate=0.1, loss='deviance',
              max_depth=3, max_features=None, max_leaf_nodes=None,
              min_samples_leaf=1, min_samples_split=2,
              min_weight_fraction_leaf=0.0, n_estimators=100,
              presort='auto', random_state=None, subsample=1.0, verbose=0,
              warm_start=False)

In [82]: zip(load_iris()["feature_names"], gbm.feature_importances_)
Out[82]:
[('sepal length (cm)', 0.072135639528234),
 ('sepal width (cm)', 0.10858443031280439),
 ('petal length (cm)', 0.31074531613629014),
 ('petal width (cm)', 0.43520128068933822)]

在不太了解您的潜在问题的情况下,
sklearn.employee.RandomForestClassifier
sklearn.employee.GradientBoostingClassifier
会生成功能重要性,并且可能很容易用于大多数目的。以下是有关Iris样本数据的简单示例:

In [79]: from sklearn.datasets import load_iris

In [80]: from sklearn.ensemble import GradientBoostingClassifier

In [81]: gbm.fit(load_iris()["data"], load_iris()["target"])
Out[81]:
GradientBoostingClassifier(init=None, learning_rate=0.1, loss='deviance',
              max_depth=3, max_features=None, max_leaf_nodes=None,
              min_samples_leaf=1, min_samples_split=2,
              min_weight_fraction_leaf=0.0, n_estimators=100,
              presort='auto', random_state=None, subsample=1.0, verbose=0,
              warm_start=False)

In [82]: zip(load_iris()["feature_names"], gbm.feature_importances_)
Out[82]:
[('sepal length (cm)', 0.072135639528234),
 ('sepal width (cm)', 0.10858443031280439),
 ('petal length (cm)', 0.31074531613629014),
 ('petal width (cm)', 0.43520128068933822)]

谢谢,正如问题@Randy C中提到的,我已经尝试过这种方法-我的模型预测99.99999%是由于类标签的严重不平衡。有什么建议可以解决这个问题吗?我还提取了功能重要性,但如何将它们映射到功能名称?您提到了graphlab的GBM和sklearn的线性模型,但这是sklearn的GBM,它是开源的,正如您在问题中所要求的。对于不平衡,您可能只需要设置不同的分数截止值,而不是默认的50%。ROC AUC之类的东西会给你一个指示,如果你的模型排名很好,然后,您可以根据对误报和漏报的接受程度来选择评分阈值。功能名称部分显示在最后一行:just
zip
功能名称列表,按照功能名称传递给模型的顺序以及模型的功能重要性。Hey@Randy C感谢您的帮助!我已成功地将阵列压缩在一起。但是,我不确定如何设置不同的分数界限?谢谢,正如问题@Randy C中提到的,我尝试过这种方法-我的模型预测99.99999%是由于班级标签的严重不平衡。有什么建议可以解决这个问题吗?我还提取了功能重要性,但如何将它们映射到功能名称?您提到了graphlab的GBM和sklearn的线性模型,但这是sklearn的GBM,它是开源的,正如您在问题中所要求的。对于不平衡,您可能只需要设置不同的分数截止值,而不是默认的50%。ROC AUC之类的东西会给你一个指示,如果你的模型排名很好,然后,您可以根据对误报和漏报的接受程度来选择评分阈值。功能名称部分显示在最后一行:just
zip
功能名称列表,按照功能名称传递给模型的顺序以及模型的功能重要性。Hey@Randy C感谢您的帮助!我已成功地将阵列压缩在一起。但是,我不确定如何设置不同的分数界限?