L8打卡学习笔记

news2024/9/29 13:28:12
  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

SVM与集成学习

  • SVM
    • SVM线性模型
    • SVM非线性模型
    • SVM常用参数
  • 集成学习
  • 随机森林
    • 导入数据
    • 查看数据信息
    • 数据分析
    • 随机森林模型
    • 预测结果
    • 结果分析
  • 个人总结

SVM

  • 超平面:SVM 在特征空间中寻找一个能够最大化类别间隔的超平面,称为最大间隔超平面。这个超平面就是将数据集分成不同类别的边界。
  • 支持向量:支持向量是离分隔超平面最近的样本点,它们决定了超平面的位置和方向。换句话说,只有这些样本对分类结果有影响,其他的样本点则不影响。

SVM线性模型

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='linear', C=1.0)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

SVM非线性模型

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='rbf', C=1.0, gamma=0.1)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

SVM常用参数

  1. C(默认值:1.0)
    ○ 作用:惩罚参数,用于平衡最大化分类间隔和误分类惩罚之间的关系。
    ○ 解释:较大的 C 值意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的 C 值则会更关注于间隔的大小,而允许更多的误分类,从而提高模型的泛化能力。
    ○ 常用范围:通常在 0.001 到 1000 之间进行调节。
  2. kernel(默认值:‘rbf’)
    ○ 作用:指定要使用的核函数,支持不同的非线性映射方法。
    ○ 可选值:
    ■ ‘linear’:线性核函数,即不进行任何非线性映射。
    ■ ‘poly’:多项式核函数,通常用于多项式可分的情况。
    ■ ‘rbf’:径向基函数(Radial Basis Function),又称高斯核,是最常用的非线性核函数。
    ■ ‘sigmoid’:类似于神经网络的激活函数,较少使用。
    ■ 你也可以传递自定义核函数,方法是传递一个函数。
  3. degree (默认值:3)
    ○ 作用:当 kernel=‘poly’ 时,指定多项式核的多项式次数。
    ○ 解释:如果使用多项式核函数(poly),degree 参数决定多项式的阶数,通常是 2 或 3。
  4. gamma(默认值:‘scale’)
    ○ 作用:核函数系数,适用于 ‘rbf’、‘poly’ 和 ‘sigmoid’ 核函数。
    ○ 可选值:
    ■ ‘scale’:使用 1 / (n_features * X.var()) 作为默认值。这个值会根据输入特征的数量和方差自动调整。
    ■ ‘auto’:使用 1 / n_features 作为值。
    ○ 解释:gamma 值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma 值越小,模型更倾向于平滑。
  5. coef0(默认值:0.0)
    ○ 作用:核函数中的独立项,仅在 kernel=‘poly’ 或 kernel=‘sigmoid’ 时有意义。
    ○ 解释:用于控制多项式核函数和 sigmoid 核函数中的偏移量。

集成学习

  1. Bagging在做预测时,对于分类任务,使用简单的投票法。对于回归任务使用简单平均法。若分类预测时出现两个类票数一样时,则随机选择一个。
  2. Boosting 工作原理:
  • 弱学习器:中的弱学习器通常是性能稍微优于随机猜测的模型,通常使用简单的模型(如浅层决策树)。
  • 加权训练:在每一次迭代中,Boosting 会调整每个样本的权重,增加那些前一次模型预测错误样本的权重,使得后续的学习器更关注这些难以分类的样本。
  • 加权投票:最终模型是通过将所有弱学习器的预测结果加权整合而成,通常采用加权投票(分类问题)或加权平均(回归问题)。

随机森林

  • 一种基于集成学习的算法,主要用于分类和回归分析。随机森林通过结合多个决策树来提高模型的准确性和稳健性,步骤如下:
  1. 随机抽样:从原始训练数据中随机抽取多个样本集(通常是相同大小),为每棵决策树准备训练数据。
  2. 构建决策树:对于每个样本集,根据随机选取的特征构建一棵决策树。树的生长过程中使用信息增益、基尼指数等标准进行节点分裂。
  3. 集成预测:
    对于分类任务,随机森林通过对所有决策树的预测进行投票,选择票数最多的类别作为最终类别。
    对于回归任务,计算所有树的预测值的平均值。

导入数据

import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

data = pd.read_csv(r'C:\Users\11054\Desktop\kLearning\L678_learning\data.csv')
data

查看数据信息

data.info()
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'  # 指定默认字体为黑体
feature_map = {
    'Temperature': '温度',
    'Humidity': '湿度百分比',
    'Wind Speed': '风速',
    'Precipitation (%)': '降水量百分比',
    'Atmospheric Pressure': '大气压力',
    'UV Index': '紫外线指数',
    'Visibility (km)': '能见度'
}
plt.figure(figsize=(15, 10))

for i, (col, col_name) in enumerate(feature_map.items(), 1):
    plt.subplot(2, 4, i)
    sns.boxplot(y=data[col])
    plt.title(f'{col_name}的箱线图', fontsize=14)
    plt.ylabel('数值', fontsize=12)
    plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.tight_layout()
plt.show()
C:\Users\11054\AppData\Local\Temp\ipykernel_7496\1699620420.py:22: UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font.
  plt.tight_layout()
C:\Users\11054\.conda\envs\kmate\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font.
  fig.canvas.print_figure(bytes_io, **kw)

在这里插入图片描述

print(f"温度超过60°C的数据量:{data[data['Temperature'] > 60].shape[0]},占比{round(data[data['Temperature'] > 60].shape[0] / data.shape[0] * 100,2)}%。")
print(f"湿度百分比超过100%的数据量:{data[data['Humidity'] > 100].shape[0]},占比{round(data[data['Humidity'] > 100].shape[0] / data.shape[0] * 100,2)}%。")
print(f"降雨量百分比超过100%的数据量:{data[data['Precipitation (%)'] > 100].shape[0]},占比{round(data[data['Precipitation (%)'] > 100].shape[0] / data.shape[0] * 100,2)}%。")
温度超过60°C的数据量:207,占比1.57%。
湿度百分比超过100%的数据量:416,占比3.15%。
降雨量百分比超过100%的数据量:392,占比2.97%。

数据分析

data.describe(include='all')
plt.figure(figsize=(20, 15))
plt.subplot(3, 4, 1)
sns.histplot(data['Temperature'], kde=True,bins=20)
plt.title('温度分布')
plt.xlabel('温度')
plt.ylabel('频数')

plt.subplot(3, 4, 2)
sns.boxplot(y=data['Humidity'])
plt.title('湿度百分比箱线图')
plt.ylabel('湿度百分比')

plt.subplot(3, 4, 3)
sns.histplot(data['Wind Speed'], kde=True,bins=20)
plt.title('风速分布')
plt.xlabel('风速(km/h)')
plt.ylabel('频数')

plt.subplot(3, 4, 4)
sns.boxplot(y=data['Precipitation (%)'])
plt.title('降雨量百分比箱线图')
plt.ylabel('降雨量百分比')

plt.subplot(3, 4, 5)
sns.countplot(x='Cloud Cover', data=data)
plt.title('云量 (描述)分布')
plt.xlabel('云量 (描述)')
plt.ylabel('频数')

plt.subplot(3, 4, 6)
sns.histplot(data['Atmospheric Pressure'], kde=True,bins=10)
plt.title('大气压分布')
plt.xlabel('气压 (hPa)')
plt.ylabel('频数')

plt.subplot(3, 4, 7)
sns.histplot(data['UV Index'], kde=True,bins=14)
plt.title('紫外线等级分布')
plt.xlabel('紫外线指数')
plt.ylabel('频数')

plt.subplot(3, 4, 8)
Season_counts = data['Season'].value_counts()
plt.pie(Season_counts, labels=Season_counts.index, autopct='%1.1f%%', startangle=140)
plt.title('季节分布')

plt.subplot(3, 4, 9)
sns.histplot(data['Visibility (km)'], kde=True,bins=10)
plt.title('能见度分布')
plt.xlabel('能见度(Km)')
plt.ylabel('频数')

plt.subplot(3, 4, 10)
sns.countplot(x='Location', data=data)
plt.title('地点分布')
plt.xlabel('地点')
plt.ylabel('频数')

plt.subplot(3, 4, (11,12))
sns.countplot(x='Weather Type', data=data)
plt.title('天气类型分布')
plt.xlabel('天气类型')
plt.ylabel('频数')

plt.tight_layout()
plt.show()
C:\Users\11054\AppData\Local\Temp\ipykernel_7496\3587563545.py:65: UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font.
  plt.tight_layout()
C:\Users\11054\.conda\envs\kmate\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font.
  fig.canvas.print_figure(bytes_io, **kw)

在这里插入图片描述

随机森林模型

new_data = data.copy()
label_encoders = {}
categorical_features = ['Cloud Cover', 'Season', 'Location', 'Weather Type']
for feature in categorical_features:
    le = LabelEncoder()
    new_data[feature] = le.fit_transform(data[feature])
    label_encoders[feature] = le

for feature in categorical_features:
    print(f"'{feature}'特征的对应关系:")
    for index, class_ in enumerate(label_encoders[feature].classes_):
        print(f"  {index}: {class_}")

'Cloud Cover'特征的对应关系:
  0: clear
  1: cloudy
  2: overcast
  3: partly cloudy
'Season'特征的对应关系:
  0: Autumn
  1: Spring
  2: Summer
  3: Winter
'Location'特征的对应关系:
  0: coastal
  1: inland
  2: mountain
'Weather Type'特征的对应关系:
  0: Cloudy
  1: Rainy
  2: Snowy
  3: Sunny
# 构建x,y
x = new_data.drop(['Weather Type'],axis=1)
y = new_data['Weather Type']

# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(x,y,
                                                 test_size=0.3,
                                                 random_state=15)

# 构建随机森林模型
rf_clf = RandomForestClassifier(random_state=15)
rf_clf.fit(x_train, y_train)

预测结果

y_pred_rf = rf_clf.predict(x_test)
class_report_rf = classification_report(y_test, y_pred_rf)
print(class_report_rf)
              precision    recall  f1-score   support

           0       0.87      0.93      0.90      1018
           1       0.93      0.91      0.92       967
           2       0.96      0.92      0.94      1007
           3       0.91      0.91      0.91       968

    accuracy                           0.92      3960
   macro avg       0.92      0.91      0.92      3960
weighted avg       0.92      0.92      0.92      3960

结果分析

feature_importances = rf_clf.feature_importances_
features_rf = pd.DataFrame({'特征': x.columns, '重要度': feature_importances})
features_rf.sort_values(by='重要度', ascending=False, inplace=True)
plt.figure(figsize=(10, 8))
sns.barplot(x='重要度', y='特征', data=features_rf)
plt.xlabel('重要度')
plt.ylabel('特征')
plt.title('随机森林特征图')
plt.show()

在这里插入图片描述

个人总结

  • 学习了随机森林模型的使用,理解了SVM和集成学习的基本原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2176843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows如何远程Kylin系统

Windows如何远程Kylin系统 一. 配置 yum源 二. 清理yum缓存 三. 安装VNC并配置 nkvers yum install tigervnc tigervnc-server -ycp /lib/systemd/system/vncserver.service /etc/systemd/system/vncserver:1.service 说明:vncserver:1.service中的:1表…

HCIP和HCIE有什么区别呢?

HCIP和HCIE有什么区别呢?今天给大家介绍下两者的不同 ‌认证层次‌:HCIE屹立于华为认证体系的顶端,定位为专家级认证;而HCIP则位于中坚位置,属于中级认证。 难度与专业要求‌:通往HCIE之路布满挑战&…

refline.js, 一款开箱即用的参考线吸附插件

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: H5-Dooring(页面可视化搭建平台)橙子试卷(表单搭建引擎)flowmix/fl…

Linux设备上cifx板卡作为ethercat从站的调试记录

调试目标: PC主机作为ethercat主站,linux设备上的cifx板卡作为ethercat从站,实现两边的正常交互。 环境准备: windows系统的PC,PC上的intel网卡(必须选用支持做主站的网卡型号),l…

【YashanDB知识库】GBK库,生僻字插入nvarchar2字段后乱码问题

本文内容来自YashanDB官网,具体内容可见(https://www.yashandb.com/newsinfo/7488287.html?templateId1718516) 问题现象 如下SQL,插入的人名中有两个GBK生僻字“ ”和“ ”,GBK编码中没有这两个字符。 插入后,客户端utf8编码…

【Router】路由功能之端口转发(Port Forward)功能介绍及实现

端口转发(Port Forward) 端口转发是一种网络技术,它允许将传入到一个网络设备特定端口的网络流量转发到另一个设备的特定端口上,端口转发会创建一条通过路由器的路径,以便数据包可以到达网络内的设备。在路由器中创建端…

区块链:数据安全与透明的未来触手可及

在这个数字化的时代,信息的安全与透明性就像社会发展的两根支柱,愈发显得重要。而区块链技术的崛起,宛如一道耀眼的曙光,照亮了我们面临的挑战。简单来说,区块链是一种去中心化的数据库技术,它允许信息在多…

大语言模型(LLM)效率优化技术全面综述:模型优化、数据优化、框架优化

大语言模型(LLMs)在自然语言理解、语言生成和复杂推理等重要任务中展示了显著的能力,并且有潜力对我们的社会产生重大影响。然而,这些能力伴随着它们所需的大量资源,突出了开发有效技术以解决它们的效率挑战的强烈需求…

深入浅出MongoDB(三)

深入浅出MongoDB(三) 文章目录 深入浅出MongoDB(三)复制副本集设置分片分片实例备份与恢复监控ObjectId 复制 复制时将数据同步在多个服务器的过程,提供了数据的冗余备份,在多个服务器上存储数据副本&#…

操作平台使用中应每月不少于几次定期检查?

在当今数字化时代,操作平台作为企业与个人日常运营的核心载体,其稳定性和安全性直接关系到业务的高效运行与数据的严密保护。因此,定期进行操作平台的检查与维护,成为了不可忽视的重要环节。特别是,确保每月进行不少于…

肯富来 CRM 数字化项目启动,引领企业“智”变新时代

近年来,广东肯富来泵业股份有限公司(以下简称“肯富来”)开启企业数字化、智能化转型之路,利用云计算技术贯通全制程的信息化管理系统、通过高速网络端到端全覆盖实现生产可视化,并通过远程数据系统,帮助客…

日志的艺术:深入理解 spdlog

目录 1. 为什么需要日志? 2. 同步日志 vs. 异步日志 3. spdlog 的核心组成部分 4. 如何创建一个Logger 5. 如何选择输出目标(Sink) 6. 个性化你的日志格式 7. 异步日志的魔法 8. 刷新策略:何时将日志写入 9. 调整线程池&…

强化学习入门——Pybullet初体验

Pybullet 最近一直在想如何进行RL的学习,在学习RL的过程中,好的模拟仿真平台是非常重要的。除了Gym,还了解到Pybullet模块可以简便快捷地创建仿真环境,所以学习一下。 1.简介 PyBullet 是一个用于机器人学、游戏开发和图形研究…

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…

PyQt5与Html的关于地图位置显示的动态交互

PyQt5与Html的关于地图位置显示的动态交互 1 前言2 python部分3 HTML代码4 注意总结 1 前言 上篇本是放弃关于Folium的动态显示,但是在仔细对比Folium在python的直接应用与Html中的写法,其实两者没有什么区别,都是基于Leaflet上建立区域&…

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究 目录 文章目录 [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究目录文章研究背景 文章标题摘要1 引言2 相关工作3 数据集创建3.1 数据收集3.2 目标提示生成3.3 数据集注…

[ACS_C]:以 H2和 O2等离子体处理的 Al2O3为载体的 Pt 催化剂用于液态有机氢载体对二苄基甲苯和全氢二苄基甲苯的加氢和脱氢

摘要:二苄基甲苯 (DBT) 是一种很有前途的液态有机氢载体 (LOHC),理论储氢量为 6.2 wt%,可与可再生能源发电系统耦合。本工作采用一种方便、环保的等离子体处理方法改性氧化铝表面羟基和表面氧空位 (SOV)。通过浸渍处理后的氧化铝制备了不同的…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”,但您知道什么是变砖手机吗?正如许多论坛中经常提出的问题一样,我如何知道我的手机是否变砖了?好吧,手机变砖主要有两种类型,即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

MATLAB guide选择图片和全局变量使用

文章目录 前言一、按键选取文件二、全局化变量使用全局华使用 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例可供参考 一、按键选取文件 [filename,pathname]…

想要编辑 PDF 文件?使用这 10 种最佳 PDF 编辑工具

您是否遇到过利益干系人要求您对 PDF 文件进行细微更改的情况? 通常我们会这样做! 但是,对你来说,做出要求的改变有多难呢? 好吧,当您没有用于创建 PDF 文件的源文件时,问题就来了。是的&…