本文参考自https://blog.csdn.net/zjuPeco/article/details/77371645
随机森林主要用于分类、回归。一般就是输入数据得出一个最终结果,本文主要用来求各指标的权重。
运用python中的sklearn库(该库已经封装好了随机森林算法,我们只需要调用即可)
首先
输入数据的格式:(代码小白摸爬滚打后的经验总结)
纯数字,纯数字,不需要表头
像这样的在这里插入图片描述上代码
先导入数据,csv或者excel都可(若格式为excel,则将pd.read_csv(…)改为pd.read_excel)

# -*- coding: utf-8 -*-
"""
Created on Tue Aug  3 08:09:56 2021

@author: Amor
"""
#利用sklearn库求各指标的权重
#数据文件应该时纯数据,没有表头,表头在下面的df.columns处按列顺序定义
import pandas as pd
import numpy as np
url = 'G://代码//python//转化.data'
df = pd.read_csv(url, header = None)

接下来定义数据列的名称

// An highlighted block
#定义各列数据的名称,按自己文件中列的顺序命名
df.columns = ['yiji', 'erji', 'sanji', 'siji', 'wuji', 'liuji', 'qiji',  'baji', 'jiuji']

然后查看数据中的数据格式

// An highlighted block
df.info()#查看文件中数据类型
#每列数据共392行,整数型数据
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 392 entries, 0 to 391
Data columns (total 9 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   yiji    392 non-null    int64
 1   erji    392 non-null    int64
 2   sanji   392 non-null    int64
 3   siji    392 non-null    int64
 4   wuji    392 non-null    int64
 5   liuji   392 non-null    int64
 6   qiji    392 non-null    int64
 7   baji    392 non-null    int64
 8   jiuji   392 non-null    int64
dtypes: int64(9)
memory usage: 27.7 KB
#注意:如果数据为字符型object时无法进行计算,需要转化为int或float

接下来就可以调用函数进行分析了

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
x, y = df.iloc[:, 0:].values, df.iloc[:, 0].values #0表示从第一列开始,即索引下标为0的列
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
feat_labels = df.columns[0:]
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)
forest.fit(x_train, y_train)
importances = forest.feature_importances_
indices = np.argsort(importances)[::-1] #[::-1]表示将各指标按权重大小进行排序输出
for f in range(x_train.shape[1]):
    print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))

运行后的结果如下:

 1) yiji                           0.330188
 2) erji                           0.177266
 3) sanji                          0.111752
 4) siji                           0.082379
 5) wuji                           0.068437
 6) qiji                           0.060532
 7) baji                           0.058051
 8) liuji                          0.057615
 9) jiuji                          0.053782

这样就求出了各指标的权重,加起来正好等于1.
以上是结合大神的代码做了一些调整后得到本文想要的结果,毕业论文上的小笔记,纯粹是为了自己记忆。大神轻喷。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐