开发者社区 > 大数据与机器学习 > 人工智能平台PAI > 正文

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

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

展开
收起
三分钟热度的鱼 2023-06-05 15:35:42 135 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云机器学习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 循环遍历数组,并输出每个特征的权重得分。

    2023-06-05 22:09:00
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在机器学习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")
    
    # 创建Pipeline
    pipeline = 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组件,并将收集到的模型信息传递给它。最后,我们遍历每个特征的重要性,并输出其名称和重要性。

    2023-06-05 21:05:58
    赞同 展开评论 打赏
  • 训练op里边getModelInfo可以拿到特征重要性,Classifier上现在应该是只能print,可以试一下,有个缩略输出,enableLazyPrintModelInfo这个开关。此回答整理自钉群“Alink开源--用户群”

    2023-06-05 15:55:10
    赞同 展开评论 打赏

相关产品

  • 人工智能平台 PAI
  • 热门讨论

    热门文章

    相关电子书

    更多
    大规模机器学习在蚂蚁+阿里的应用 立即下载
    基于Spark的面向十亿级别特征的 大规模机器学习 立即下载
    基于Spark的大规模机器学习在微博的应用 立即下载