在机器学习PAI使用Pipeline组件训练出来的随机森林模型,怎么输出各个特征的权重呢?[阿里云机器学习PAI]

在机器学习PAI使用Pipeline组件训练出来的随机森林模型,怎么输出各个特征的权重呢?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 在阿里云机器学习PAI中使用Pipeline组件训练出来的随机森林模型可以通过以下步骤输出各个特征的权重:

    1. 加载随机森林模型

    首先,您需要使用 joblib 或者 pickle 将模型序列化并保存到文件中。例如,如果您使用的是 joblib 库,可以按照以下方式将模型保存到文件中:

    import joblib# 训练好的随机森林模型rf_model = ...# 将模型保存到文件中joblib.dump(rf_model, "model.pkl")

    接着,在 Python 脚本中加载模型:

    import joblib# 加载随机森林模型rf_model = joblib.load("model.pkl")
    1. 获取特征重要性

    随机森林模型可以通过 feature_importances_ 属性获取每个特征的重要性。您可以按照以下方式访问该属性:

    # 获取特征重要性feature_importances = rf_model.feature_importances_# 输出各个特征的权重for i, importance in enumerate(feature_importances):    print(f"Feature {i}: {importance}")

    在上述代码中,feature_importances_ 属性返回一个数组,其中每个元素都是每个特征的重要性得分。您可以使用 for 循环遍历数组,并输出每个特征的权重得分。

  2. 在机器学习PAI中使用Pipeline组件训练出来的随机森林模型,可以通过RandomForestModelInfoBatchOp组件来获取模型的信息,包括每个特征的重要性。以下是一个简单的例子:

    from pyalink.alink import *from pyalink.alink.batch import *# 读取源表source = CsvSourceBatchOp()     .setFilePath("train.csv")     .setFieldDelimiter(",")     .setSchemaStr("label int, f0 double, f1 double, f2 double")# 将特征转换为向量vectorizer = VectorAssembler()     .setSelectedCols(["f0", "f1", "f2"])     .setOutputCol("features")# 训练随机森林分类器classifier = RandomForestClassifier()     .setFeatureCols("features")     .setLabelCol("label")# 创建Pipelinepipeline = Pipeline()     .add(vectorizer)     .add(classifier)# 链接操作并运行model = pipeline.fit(source).collectModel()# 获取随机森林模型信息model_info = RandomForestModelInfoBatchOp()     .setModelInfo(model)     .collect()# 输出特征重要性print("Feature Importance: ")for feat_imp in model_info[0].featureImportance:    print(feat_imp.featureName, feat_imp.importance)

    在这个例子中,我们首先读取源表,然后使用VectorAssembler组件将特征转换为向量。接着,我们训练了一个随机森林分类器,并将其与VectorAssembler组件一起打包到Pipeline中。然后,我们使用Pipeline.fit()方法对源表进行训练,并使用PipelineModel.collectModel()方法收集训练得到的模型。

    接着,我们创建了一个RandomForestModelInfoBatchOp组件,并将收集到的模型信息传递给它。最后,我们遍历每个特征的重要性,并输出其名称和重要性。

  3. 训练op里边getModelInfo可以拿到特征重要性,Classifier上现在应该是只能print,可以试一下,有个缩略输出,enableLazyPrintModelInfo这个开关。此回答整理自钉群“Alink开源–用户群”