随机森林(RF)

一、主体部分

随机森林(RF)_第1张图片

[1]李慧. 基于证据权重法和机器学习的赣南钨矿成矿远景预测[D].江西理工大学,2022.

二、细节部分

1.决策树

判度西瓜是否为好瓜的决策树,根据西瓜的不同属性进行分类,最后判度西瓜是否为好瓜

随机森林(RF)_第2张图片

随机森林(RF)_第3张图片

随机森林(RF)_第4张图片

 2.决策数构建

随机森林(RF)_第5张图片

2.1 ID3算法 

计算每个属性的信息增益来构建决策树。Gain(X,Y)=H(X)-H(X|Y)信息熵 - 条件熵。X为结果,Y为属性

随机森林(RF)_第6张图片

随机森林(RF)_第7张图片

信息熵是计算变量X的熵,条件熵是确定变量Y的前提条件下,变量X的熵。

随机森林(RF)_第8张图片

  ID3算法实例

随机森林(RF)_第9张图片

随机森林(RF)_第10张图片

 随机森林(RF)_第11张图片

随机森林(RF)_第12张图片

选出所有纹理为清晰的数据,在这9个数据组成的新样本里,计算剩余5个属性的信息增益。 

随机森林(RF)_第13张图片

 2.2 CART算法

随机森林(RF)_第14张图片

随机森林(RF)_第15张图片

随机森林(RF)_第16张图片

实例:

随机森林(RF)_第17张图片

随机森林(RF)_第18张图片

基尼指数越大,说明越杂乱,形势越不明朗,所以选择基尼指数小的。

随机森林(RF)_第19张图片

随机森林(RF)_第20张图片

随机森林(RF)_第21张图片

 随机森林(RF)_第22张图片

剪枝后基尼指数增大(衡量系统的混乱程度,剪枝前会有很多分支,分得比较细,不易混乱)

随机森林(RF)_第23张图片

3.随机森林

随机森林(RF)_第24张图片

from sklearn.datasets import load_iris
#iris是鸢尾花数据集,包含150行数据
#分为3类:山鸢尾(Setosa)、杂色鸢尾(Versicolour)、维吉尼亚鸢尾(Virginica)
#每类50行数据,每行数据包含4个属性特征
#花萼长度(sepal length)、花萼宽度(sepal width)
#花瓣长度(petal length)、花瓣宽度(petal width)
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np

iris = load_iris()
#print(iris.data) #150*4 数组,花萼长度、花萼宽度、花瓣长度、花瓣宽度
#print(iris.target) #每个花的类别,0为山鸢尾,1为杂色鸢尾,2为维吉尼亚鸢尾
#print(iris.target_names)#花类别的名称
#print(iris.feature_names)#特征名称
#print(iris.DESCR) #备注说明

#设置DataFrame打印最大宽度和行数,若打印的比较多中间会有省略号
#pd.set_option('display.width',None)
#pd.set_option('display.max_rows',None)

#用pandas把数据集转换一下
df = pd.DataFrame(iris.data,columns=iris.feature_names)
#print(df)
df['is_train'] = np.random.uniform(low = 0,high = 1,size = len(df)) <= .75 #加了一列is_train
#随机从0-1中出数,若小于0.75就在后面加上True,3/4的数据为训练集,1/4为测试集
#print(df)
df['species'] = pd.Categorical.from_codes(iris.target,iris.target_names) #加了名称一列
#print(df.head(10))

#3/4为训练集,1/4为测试集
train,test = df[df['is_train']==True],df[df['is_train']==False]
print(test)
features = df.columns[:4]

clf = RandomForestClassifier() #参数有很多

y,_ = pd.factorize(train['species'])
#print(train['species']) #训练数据的类别(setosa,versicolor,virginica)print(y)#0,1,2
#train[features]训练数据特征,y分类结果,有监督学习
clf.fit(train[features],y)#两个参数,给出题和答案,自主学习,不用关注里边的过程了

predicts = iris.target_names[clf.predict(test[features])] #clf为刚刚训练好的随机森林,用来预测,得出预测类别种类

#crosstab交叉表
print(pd.crosstab(test['species'],predicts,rownames=['actual'],colnames=['predicts']))
#test['species']为实际类别种类,predicts为预测类别种类,对角线上预测结果正确


 资料:https://www.bilibili.com/video/BV1xe4y187yM?spm_id_from=333.337.search-card.all.click

你可能感兴趣的:(随机森林)