随机森林、数据集划分、准确率、混淆矩阵(Python实现)

目录

0 今日目标

1 随机森林(RandomForestClassifier)

1.1 案例1

1.2 案例2 

2  数据集划分(train_test_split)

3 准确率 (accuracy_score)

4 混淆矩阵 (confusion_matrix )

4.1 混淆矩阵

4.2 举例说明 

4.3 参数说明 

4.4 案例 

 致谢


0 今日目标

from sklearn.ensemble import RandomForestClassifier #随机森林
from sklearn.model_selection import train_test_split #数据集划分
from sklearn.metrics import accuracy_score #准确率
from sklearn.metrics import confusion_matrix #混淆矩阵

1 随机森林(RandomForestClassifier)

1.1 案例1

#=========导包==============================
from sklearn.ensemble import RandomForestClassifier

#========data:训练数据, label:标签==========
data = [[0, 0, 0], [1, 1, 1], [2, 2, 2], [1, 1, 1], [2, 2, 2], [3, 3, 3], [1, 1, 1], [4, 4, 4]]
label = [0, 1, 2, 1, 2, 3, 1, 4]

#======用随机森林来拟合(训练)数据==============
model = RandomForestClassifier()
model.fit(data, label)

#======x_test 测试数据======================
x_test = [[1, 2, 3],
          [5, 6, 7],
          [8, 8, 8],
          [9, 9, 9]]

#======输出 x_test每组数据的预测结果的标签值=======
print(model.predict(x_test))

#====输出的是二维矩阵 ,第i行j列表示 x_test第i行测试数据在每个label上的概率(这李标签共有5个 0,1,2,3,4)====
print(model.predict_proba(x_test))
#predict结果:

[2 4 4 4]

#predict_proba结果:

[[0.   0.38 0.45 0.14 0.03]
 [0.   0.   0.08 0.16 0.76]
 [0.   0.   0.08 0.16 0.76]
 [0.   0.   0.08 0.16 0.76]]


Process finished with exit code 0

1.2 案例2 

情景:基于相亲网站男方提供的个人基本资料作为输入,以女方是否相亲做标签做训练,用训练出的模型预测女方是否相亲。

#==================导包===================   
from sklearn.ensemble import RandomForestClassifier

#======"年龄", "身高", "年收入", '学历'(0:大专, 1:本科, 2:硕士)======
X = [
    [25, 179, 15, 0],
    [33, 190, 19, 0],
    [28, 180, 18, 2],
    [25, 178, 18, 2],
    [46, 100, 100, 2],
    [40, 170, 170, 1],
    [34, 174, 20, 2],
    [36, 181, 55, 1],
    [35, 170, 25, 2],
    [30, 180, 35, 1],
    [28, 174, 30, 1],
    [29, 176, 36, 1],
]

#===========有否相亲 0:N 1:Y===================
y = [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]

#======现在我们把训练数据,和对应的分类放入分类器中进行训练======
model = RandomForestClassifier().fit(X, y)

#======预测下面此人是否相亲======
p = [[28, 180, 18, 2]]
print(model.predict(p))
[1]

Process finished with exit code 0

# 输出结果是[1] 是

2  数据集划分(train_test_split)

2.1 用途

在机器学习中,该函数可按照用户设定的比例,随机将样本集合划分为训练集 和测试集,并返回划分好的训练集和测试集数据。

2.2 语法 

X_train,X_test, y_train, y_test =cross_validation.train_test_split(X,y,test_size, random_state)

 2.3 参数说明

随机森林、数据集划分、准确率、混淆矩阵(Python实现)_第1张图片2.4 代码示例 

import numpy as np
from sklearn.model_selection import train_test_split

#创建一个数据集X和相应的标签y,X中样本数目为100
X, y = np.arange(200).reshape((100, 2)), range(100)

#用train_test_split函数划分出训练集和测试集,测试集占比0.33
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42)

#打印出原始样本集、训练集和测试集的数目
print("The length of original data X is:", X.shape[0])
print("The length of train Data is:", X_train.shape[0])
print("The length of test Data is:", X_test.shape[0])
The length of original data X is: 100
The length of train Data is: 67
The length of test Data is: 33

Process finished with exit code 0

3 准确率 (accuracy_score)

分类准确率分数是指所有分类正确的百分比。分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。

sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数 

案例: 

import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
print("正确率:",accuracy_score(y_true, y_pred))
print("正确个数:",accuracy_score(y_true, y_pred, normalize=False))
正确率: 0.5
正确个数: 2

Process finished with exit code 0

4 混淆矩阵 (confusion_matrix )

4.1 混淆矩阵

在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)

4.2 举例说明 

假设有一个用来对猫(cats)、狗(dogs)、兔子(rabbits)进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结。假设总共有 27 只动物:8只猫, 6条狗, 13只兔子。结果的混淆矩阵如下图:

随机森林、数据集划分、准确率、混淆矩阵(Python实现)_第2张图片

在这个混淆矩阵中,实际有 8只猫,但是系统将其中3只预测成了狗;对于 6条狗,其中有 1条被预测成了兔子,2条被预测成了猫。从混淆矩阵中我们可以看出系统对于区分猫和狗存在一些问题,但是区分兔子和其他动物的效果还是不错的。所有正确的预测结果都在对角线上,所以从混淆矩阵中可以很方便直观的看出哪里有错误,因为他们呈现在对角线外面。

随机森林、数据集划分、准确率、混淆矩阵(Python实现)_第3张图片 其中灰色部分是真实分类和预测分类结果相一致的,绿色部分是真实分类和预测分类不一致的,即分类错误的。 

4.3 参数说明 

y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果
labels:是所给出的类别,通过这个可对类别进行选择
sample_weight : 样本权重

sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

4.4 案例 

(1)案例1

from sklearn.metrics import confusion_matrix

y_true=[2,1,0,1,2,0]
y_pred=[2,0,0,1,2,1]

C=confusion_matrix(y_true, y_pred)
print("混淆矩阵:")
print(C)
混淆矩阵:
[[1 1 0]
 [1 1 0]
 [0 0 2]]

Process finished with exit code 0

(2)案例2 

from sklearn.metrics import confusion_matrix

y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
C=confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print("混淆矩阵:")
print(C)
混淆矩阵:
[[2 0 0]
 [0 0 1]
 [1 0 2]]

Process finished with exit code 0

 致谢

————————————————
https://blog.csdn.net/m0_38061927/article/details/77198990

 

你可能感兴趣的:(#,机器学习,深度学习,机器学习,python,人工智能)