首页 > 编程语言 >Python从0到100(五十八):机器学习-随机森林及对复杂数据集分类

Python从0到100(五十八):机器学习-随机森林及对复杂数据集分类

时间:2024-09-26 21:23:05浏览次数:3  
标签:iris plt min Python 随机 test 100 森林 五十八

随机森林通过构建多个决策树来完成分类或回归任务。随机森林的核⼼思想是通过多个弱学习器(决策树)的集成来构建⼀个强学习器,从⽽提⾼模型的泛化能⼒和稳定性。

1.基本原理

随机森林的基本原理如下:

  1. 从训练集中随机抽取⼀定数量的样本(有放回抽样),构建⼀个决策树(称为⾃助采样法或bootstrap采样)。
  2. 在每个决策树的节点上,随机选择⼀部分特征进⾏划分。
  3. 对每棵树进⾏训练,直到达到指定的树的数量。
  4. 对于分类问题,采⽤投票法来确定最终的分类结果;对于回归问题,采⽤平均法来确定最终的回归结果。

2.如何选择适当的超参数构建随机森林

选择适当的超参数来构建随机森林模型⾮常重要,因为它们可以显著影响模型的性能和泛化能⼒。
下⾯是⼀些常⻅的随机森林超参数以及如何选择它们的⼀些建议⽅法:
1、树的数量(n_estimators):
这是随机森林中包含的决策树的数量。
选择⽅法:通常情况下,增加树的数量可以提⾼模型的性能,但也会增加计算成本。您可以使⽤交叉验证或验证集的性能来选择适当数量的树。当性能趋于稳定时,不再增加树的数量。
2、树的深度(max_depth):
这是每棵决策树的最⼤深度,控制了树的复杂性。
选择⽅法:可以通过绘制学习曲线来选择最⼤深度。学习曲线显示了训练误差和验证误差随最⼤深度的变化情况。通常,最⼤深度不宜过⼤,以防⽌过拟合。
3、特征数量的选择(max_features):
这是每个节点⽤于分裂的特征的最⼤数量。
选择⽅法:通常,max_features设置为"auto"(等于总特征数的平⽅根)是⼀个不错的起点。您也可以尝试其他值,如"log2"或⼀个特定的整数值。通过交叉验证或验证集来确定最佳值。
4、最⼩叶⼦节点样本数(min_samples_leaf):
这是叶⼦节点上所需的最⼩样本数,⽤于控制树的⽣⻓。
选择⽅法:增加此参数可以防⽌树在训练数据上过拟合。通常情况下,设置⼀个较⼩的值,如1,以允许树⽣⻓到较⼩的叶⼦节点。然后,通过交叉验证或验证集来选择最佳值。
5、最⼩分裂节点样本数(min_samples_split):
这是⼀个节点分裂所需的最⼩样本数。
选择⽅法:类似于min_samples_leaf,增加此参数可以防⽌过拟合。通常,可以选择⼀个适中的值,然后通过交叉验证或验证集来调整。
6、随机种⼦(random_state):
这是⽤于控制模型的随机性的种⼦值。
选择⽅法:为了可重复性,通常建议设置⼀个固定的随机种⼦。这可以确保多次运⾏模型时得到相同的结果。

超参数的选择通常需要进⾏实验和调整,可以使⽤交叉验证来评估不同超参数组合的性能,然后选择最佳组合。Grid Search和Random Search等⾃动调参技术也可⽤于更全⾯地搜索超参数空间。最终的选择应基于具体问题和
数据集的性质来决定。

3.优缺点

优点:

  1. ⾼准确性:随机森林能够取得较⾼的准确性,在许多数据集上都有良好的表现。
  2. 抗过拟合能⼒强:随机森林能够有效地降低过拟合的⻛险,因为它对多个决策树的预测结果进⾏了集成。
  3. 能够处理⾼维数据:随机森林能够处理⾼维数据和⼤规模数据集,并且不需要进⾏特征选择。

缺点:

  1. 模型解释性较差:由于随机森林是⼀个集成模型,因此难以解释单个决策树的预测过程。
  2. 训练时间较⻓:由于需要构建多棵决策树并集成它们的结果,随机森林的训练时间较⻓。
  3. 对噪声敏感:随机森林对噪声和异常值⽐较敏感,可能会影响模型的性能。

4.适用场景

随机森林适⽤于以下场景:

  1. 分类和回归问题:随机森林适⽤于分类和回归问题,并且在许多不同类型的数据集上都有良好的表现。
  2. ⼤规模数据集:随机森林能够处理⼤规模数据集,并且不需要进⾏特征选择,因此适⽤于处理⾼维数据和⼤
    规模数据集。
  3. 数据特征具有复杂交互关系:随机森林能够有效地处理数据特征之间的复杂交互关系,因此适⽤于处理特征
    之间存在较强关联性的问题。

总之,随机森林是⼀种强⼤的集成学习算法,具有⾼准确性和抗过拟合能⼒强的优点,适⽤于处理多种类型的分类和回归问题。然⽽,在解释模型结果和训练时间⽅⾯可能存在⼀些挑战。

5.对复杂数据集分类

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from matplotlib.colors import ListedColormap
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data[:, [2, 3]] # 取特征的后两个维度
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建随机森林模型
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)
rf_clf.fit(X_train, y_train)
# 在测试集上进⾏预测
y_pred = rf_clf.predict(X_test)
# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 可视化决策边界
def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])
    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max,
    resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())
    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1], alpha=0.8, c=[cmap(idx)],
    marker=markers[idx], label=cl, edgecolor='black')
    if test_idx:
        X_test, y_test = X[test_idx, :], y[test_idx]
        plt.scatter(X_test[:, 0], X_test[:, 1], c='', edgecolor='black', alpha=1.0,
    linewidth=1, marker='o', s=100, label='Test Set')
plot_decision_regions(X_train, y_train, classifier=rf_clf)
plt.title('Random Forest Classifier - Decision Boundary (Training Set)')
plt.xlabel('Petal Length (cm)')
plt.ylabel('Petal Width (cm)')
plt.legend(loc='upper left')
plt.show()

在这里插入图片描述
⾸先加载了鸢尾花数据集,并将特征选取为后两个维度以便在⼆维平⾯上可视化。然后构建了⼀个随机森林分类器,并在训练集上训练模型。接着,使⽤ plot_decision_regions 函数绘制了训练集的决策边界,其中不同颜⾊的区域表示不同类别的决策区域。

6.获取随机森林特征分数

Scikit-Learn中,可以使⽤ feature_importances_ 属性来获取随机森林模型中特征的重要性分数:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 创建随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
# 训练模型
rf_classifier.fit(X, y)
# 获取特征重要性分数
feature_importance_scores = rf_classifier.feature_importances_
# 可视化特征重要性
plt.figure(figsize=(13, 6))
plt.barh(range(len(feature_importance_scores)), feature_importance_scores,
tick_label=iris.feature_names)
plt.xlabel('Feature Importance Score')
plt.ylabel('Features')
plt.title('Feature Importance in Random Forest')
plt.show()

使⽤了鸢尾花数据集,创建了⼀个包含100棵树的随机森林分类器,并训练了模型。然后,通过feature_importances_ 属性获取了每个特征的重要性分数,并使⽤matplotlib库绘制了特征重要性的条形图:在这里插入图片描述

标签:iris,plt,min,Python,随机,test,100,森林,五十八
From: https://blog.csdn.net/weixin_51390582/article/details/140586919

相关文章

  • python爬虫介绍
    python网络爬虫介绍网络爬虫就是按照一定的规则,自动地抓取网络上的各种信息的程序。网络爬虫分类按照系统结构和实现技术,可以把分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际应用中可以将这几种结合起来使用。 通用网络爬虫:如网络搜过引擎,根据提示信息尽可......
  • Python轴承故障诊断 (四)基于EMD-CNN的故障分类
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理三十多个开源数据集|故障诊断再也不用担心数据集了!Python轴承故障诊断(一)短时傅里叶变换STFT-CSDN博客Python轴承故障诊断(二)连续小波变换CWT-CSDN博客Python轴承故障诊断(三)经验模态分解EMD-CSDN博客......
  • Python工程和科学计算1简介
    1简介本章简要介绍了Python编程语言的可扩展性、应用领域和功能。如果您需要在科学工作中进行大量计算,并希望以图形化的方式呈现计算结果,那么您应该认真考虑使用Python。Python是一种编程语言,其功能与MATLAB相似,且是科学计算目前用户最多的首选语言。1.1开发环境1.1.1......
  • 云服务器100g流量可以支撑多少ip访问
    云服务器的100G流量可以支撑多少IP访问取决于多种因素,包括每个IP访问的平均数据量、访问模式、服务器的优化程度以及提供的服务类型。以下是一些影响因素和估算方法:影响因素:页面大小:每次页面访问所需的数据量。例如,一个简单的文本页面可能只有几十KB,而一个包含大量图片和视频的页面......
  • python打包whl文件
    在python中,使用setuptools库创建wheel包确保已安装wheel和setuptools#使用piplist查看已经安装的包piplist如果没有,就用下面的命令安装pipinstallwheelsetuptools在当前路径创建一个aaa的文件夹 在aaa里创建一个__init__.py的文件,内容如下classtest_......
  • python字符串
    1定义字符串text="Hello,World!"2多行字符串multi_line_text="""Thisisamulti-linestring."""3 字符串拼接greeting="Hello"name="Alice"message=greeting+","+name+"!"4......
  • (开题)flask框架宠物上门服务系统(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,宠物已成为许多家庭的重要成员,它们不仅是忠诚的伴侣,更是情感的寄托。然而,随着工作压力的增加和生活方式的转变,许多宠......
  • (开题)flask框架宠物医院管理系统(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着宠物饲养的普及和宠物主人对宠物健康关注度的提升,宠物医疗行业迎来了前所未有的发展机遇。然而,传统的宠物医院管理模式在应对日益增长......
  • (开题)flask框架大学生企业推荐系统(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及,大学生群体日益庞大,就业市场竞争也日益激烈。传统的人才招聘方式往往依赖于招聘网站的海量信息筛选和线下招聘会,这不仅......
  • python 修改cmd窗口标题
    python相关学习资料: https://edu.51cto.com/video/3502.html https://edu.51cto.com/video/3832.html https://edu.51cto.com/video/1158.htmlPython修改CMD窗口标题在编程过程中,我们经常需要在命令行界面(CMD)中运行Python脚本。有时,为了便于区分不同的命令行窗......