【Python】scikit-learn 常用算法模型

文章目录

    • 一、分类算法
      • 1、K近邻算法(K-Nearest Neighbors, KNN)
      • 2、支持向量机(Support Vector Machine, SVM)
      • 3、决策树(Decision Tree)
    • 二、回归算法
      • 4、线性回归(Linear Regression)
    • 三、集成学习算法
      • 5、随机森林(Random Forest)
      • 6、AdaBoost(Adaptive Boosting)
    • 四、其他常用模型
      • 7、朴素贝叶斯
      • 8、K均值聚类
      • 9、PCA降维
      • 10、神经网络
    • 参考

scikit-learn是一个广泛使用的Python机器学习库,提供了大量的算法和工具用于数据预处理、模型训练、模型评估等。

一、分类算法

1、K近邻算法(K-Nearest Neighbors, KNN)

  • 原理:基于实例的学习,通过测量不同数据点之间的距离进行分类。
  • 作用:用于分类和回归问题,通过找到训练数据集中与新数据点最相似的k个样本,并根据这些样本的标签进行预测。
  • 公式:无特定公式,但核心在于距离的计算,如欧式距离 (d(x,y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2})。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建KNN分类器,设置近邻数为3
knn = KNeighborsClassifier(n_neighbors=3)# 训练模型
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
# 输出 Accuracy: 1.0

2、支持向量机(Support Vector Machine, SVM)

  • 原理:在特征空间上找到一个最佳超平面,使得正负样本之间的边界最大化。
  • 作用:主要用于二分类问题,也可通过组合多个SVM解决多分类问题。
  • 公式:超平面方程 (w^Tx + b = 0),其中 (w) 是权重向量,(b) 是偏置项。优化问题通常表达为 (\min_{w,b} \frac{1}{2}||w||^2) s.t. (y_i(w^Tx_i + b) \geq 1),其中 (y_i) 是样本标签。
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建SVM分类器
svm = SVC(kernel='linear')  # 线性核SVM# 训练模型
svm.fit(X_train, y_train)# 预测
y_pred = svm.predict(X_test)# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
# 输出 Accuracy: 1.0

3、决策树(Decision Tree)

  • 原理:通过树形结构对数据进行分类,每个节点代表一个特征属性上的判断条件。
  • 作用:直观易理解的分类模型,能够处理数值和分类数据。
  • 公式:无特定公式,但构建过程中涉及信息熵和信息增益的计算,如信息熵 (H(X) = -\sum_{x \in X} P(x) \log_2 P(x))。
from sklearn.tree import DecisionTreeClassifier  
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score  # 加载数据  
iris = load_iris()  
X, y = iris.data, iris.target  # 划分数据集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 创建决策树分类器  
dtree = DecisionTreeClassifier(random_state=42)  # 训练模型  
dtree.fit(X_train, y_train)  # 预测  
y_pred = dtree.predict(X_test)  # 评估模型  
print("Accuracy:", accuracy_score(y_test, y_pred))
# 输出 Accuracy: 1.0

二、回归算法

4、线性回归(Linear Regression)

  • 原理:利用回归分析确定两种或多种变量间相互依赖的定量关系。
  • 作用:预测连续数值的输出,如房价预测、销售额预测等。
  • 公式:线性回归方程 (y = wx + b),其中 (w) 是权重系数,(b) 是截距项。
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, accuracy_score# 生成模拟的回归数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
linear_regression = LinearRegression()# 训练模型
linear_regression.fit(X_train, y_train)  # 使用训练数据拟合模型# 进行预测
y_pred = linear_regression.predict(X_test)# 评估模型:计算均方误差(Mean Squared Error, MSE)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
# 输出 Mean Squared Error: 0.010420222653186971

三、集成学习算法

5、随机森林(Random Forest)

  • 原理:通过构建多棵决策树并结合它们的输出来提高预测精度和稳定性。
  • 作用:用于分类和回归问题,能够减少模型的方差,提高预测性能。
  • 公式:无特定公式,但涉及决策树的构建和集成。
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成模拟的回归数据集
X, y = make_regression(n_samples=100, n_features=4, noise=0.1, random_state=42)# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建随机森林回归模型
random_forest = RandomForestRegressor(n_estimators=100, random_state=42)  # 设置树的数量为100# 训练模型
random_forest.fit(X_train, y_train)  # 使用训练数据拟合模型# 进行预测
y_pred = random_forest.predict(X_test)# 评估模型:计算均方误差(Mean Squared Error, MSE)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

6、AdaBoost(Adaptive Boosting)

  • 原理:通过组合多个弱分类器来创建一个强分类器,每个弱分类器针对之前分类器错误分类的样本进行训练。
  • 作用:提高分类准确率,尤其适用于不平衡数据集。
  • 公式:涉及权重更新和错误率计算等步骤,具体公式较复杂。
from sklearn.ensemble import AdaBoostRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeRegressor# 生成模拟的回归数据集
X, y = make_regression(n_samples=100, n_features=100, noise=0.1, random_state=42)# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# AdaBoost通常基于决策树等弱学习器,这里我们使用决策树回归器作为基学习器
base_estimator = DecisionTreeRegressor(max_depth=3, random_state=42)# 创建AdaBoost回归模型,设置基学习器和提升迭代次数
adaboost = AdaBoostRegressor(estimator=base_estimator, n_estimators=100, random_state=42)# 训练模型
adaboost.fit(X_train, y_train)  # 使用训练数据拟合模型# 进行预测
y_pred = adaboost.predict(X_test)
# 评估模型:计算均方误差(Mean Squared Error, MSE)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

四、其他常用模型

7、朴素贝叶斯

  • 原理:朴素贝叶斯算法是基于贝叶斯定理的一种分类方法。它假设特征之间相互独立(即特征条件独立性假设),从而简化联合概率的计算。
  • 作用:该算法主要用于分类问题,如文本分类、垃圾邮件识别等。由于其简单性和在某些领域的有效性,朴素贝叶斯被广泛使用。
  • 公式
    • 贝叶斯定理:(P(B|A) = \frac{P(A|B)P(B)}{P(A)})
    • 朴素贝叶斯分类器的后验概率公式:(P(Y=y_k|X=x) = \frac{P(Y=y_k)\prod_{i=1}{n}P(X_i=x_i|Y=y_k)}{\sum_{y_j}P(Y=y_j)\prod_{i=1}{n}P(X_i=x_i|Y=y_j)})
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建朴素贝叶斯分类器
gnb = GaussianNB()# 训练模型
gnb.fit(X_train, y_train)# 预测
y_pred = gnb.predict(X_test)# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))

8、K均值聚类

  • 原理:K均值聚类是一种无监督学习算法,它将数据划分为K个簇,使得同一簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。
  • 作用:该算法广泛应用于数据挖掘、模式识别等领域,用于发现数据中的内在结构和分组。
  • 公式
    • 欧式距离公式(用于计算数据点之间的距离):(d(x_i, x_j) = \sqrt{\sum_{k=1}^{m}(x_{ki} - x_{kj})^2})
    • K均值聚类的目标是最小化每个簇内数据点到簇中心的距离之和。
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建K均值聚类模型
kmeans = KMeans(n_clusters=4)# 训练模型  
kmeans.fit(X)# 预测聚类标签
labels = kmeans.predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='x')
plt.show()

9、PCA降维

  • 原理:PCA(主成分分析)是一种通过正交变换将原始数据转换为一系列线性无关的变量(即主成分)的降维方法。
  • 作用:PCA主要用于高维数据的降维处理,以便于可视化、去噪、加速机器学习算法等。通过减少数据的维度,可以降低计算的复杂性并提高模型的泛化能力。
  • 公式
    • 协方差矩阵:用于衡量不同特征之间的相关性。
    • 特征值和特征向量:通过求解协方差矩阵的特征值和特征向量来确定主成分的方向。
    • 主成分得分:将数据投影到主成分上得到的值。

(注:PCA的具体数学公式较为复杂,涉及矩阵运算、特征值分解等,这里仅提供了概念性的描述。)

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
print(X)
# 创建PCA模型,设置要降到的维度为2
pca = PCA(n_components=2)# 对数据进行PCA降维
X_pca = pca.fit_transform(X)# 可视化降维后的数据
plt.figure(figsize=(8, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, edgecolor='k', s=150)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA on Iris Dataset')
plt.show()

10、神经网络

  • 原理:神经网络是模拟人脑神经元连接方式的算法模型,通过多个神经元的组合和连接来学习和表示复杂的数据关系。
  • 作用:神经网络广泛应用于分类、回归、聚类、降维等多种机器学习任务。由于其强大的学习和表示能力,神经网络在图像识别、语音识别、自然语言处理等领域取得了显著成果。
  • 公式
    • 神经元的输出公式:(y = f(\sum_{i}w_ix_i + b)),其中 (w_i) 是权重,(x_i) 是输入,(b) 是偏置项,(f) 是激活函数。
    • 常见的激活函数包括Sigmoid、ReLU(Rectified Linear Unit)、Tanh等,每种激活函数都有其特定的数学公式。
    • 神经网络的训练通常使用反向传播算法(Backpropagation),该算法涉及复杂的梯度计算和权重更新过程。

(注:由于神经网络的复杂性和多样性,这里仅提供了基本的原理和公式概述。)

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建多层感知机分类器
mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42)# 训练模型
mlp.fit(X_train, y_train)# 预测
y_pred = mlp.predict(X_test)# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))

参考

  • https://scikit-learn.org/

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

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

相关文章

LCD屏入门(基于ESP32)

主要参考资料: B站【乐鑫全球开发者大会】DevCon23 #17 |HMI 智能屏解决方案 目录 1.LCD屏幕硬件层2.LVGL驱动层 1.LCD屏幕硬件层 MCU常用的驱动接口在下面,大致可以划分为串口屏和并口屏。 串口屏相较于并行屏优势是占用IO少,相…

【oracle】Oracle RAC中的GNS到底是什么?

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载 一、概述 Oracle Grid Naming Service (GNS) 是Oracle Grid Infrastructure的一个重要组件,它提供了一种集中式的命名服务&…

[机缘参悟-191] - 《道家-水木然人间清醒1》读书笔记 -14- 关系界限 - 经济和人格上的独立,走向成熟的必经之路,才能更好的谈其他情感(IT)

目录 前言: 1、“友善的孤独者” 2、“外向的孤独者” 3、道不同不相为谋 4、警惕依赖 5、完整独立的个体 6、不必纠正他人的错误,除非他影响了你 7、不再期待别人能理解自己,只有高维向下兼容你的人才能理解你 8、只有高维和同频的…

ChatGPT魔法,定制个性化提示词!

扮演Prompt创作者的角色 我想让你成为我的Prompt创作者。你的目标是帮助我创建最佳的Prompt,这个Prompt将由 你ChatGPT使用。 你将遵循以下过程: 1.首先,你会问我Prompt是关于什么的。我会告诉你,但我们需要通过不断的重复来改进…

jQuery下载教程

官网&#xff1a;https://jquery.com/ ** ** 点击为压缩版本 将网站打开 界面上邮件保存为js文件即可 在html文件中引入即可 <html> <head></head> <body><script src"./js/jquery-3.6.3.js"> </script> </body> <…

使用Arrow管理数据

在之前的数据挖掘&#xff1a;是时候更新一下TCGA的数据了推文中&#xff0c;保存TCGA的数据就是使用Arrow格式&#xff0c;因为占空间小&#xff0c;读写速度快&#xff0c;多语言支持&#xff08;我主要使用的3种语言都支持&#xff09; Format https://arrow.apache.org Ap…

JDK9-21新特性概览(持续更新)

JDK9-21新特性概览 一、JDK9新特性1.1 JEP 102: Process API Updates简介案例风险 1.2 JEP 193: Variable Handles简介案例风险 1.3 JEP 200: The Modular JDK简介案例风险 1.4 JEP 213: Milling Project Coin简介案例1.1 try-with-resources增强1.2 接口中私有方法 1.5 JEP 22…

SpringBoot实现接口防抖的几种方案,杜绝重复提交

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

一个与 WSL2 建立远程的简单方法

前言 众所周知&#xff0c;windows 会通过虚拟交换机给本机和 wsl2&#xff08;Linux 子系统&#xff09;分别分配 ip。于是本机重启或重启 wsl 服务的时候会重新分配 ip。之前所作的端口转发&#xff0c;监听之类的都会失效。而如果你搜索 “如何固定 wsl 的 ip”&#xff0c;…

GB-T 43694-2024 网络安全技术 证书应用综合服务接口规范

编写背景 随着网络技术的发展和信息化进程的加速&#xff0c;网络安全问题日益凸显。为了加强网络安全管理&#xff0c;提升网络服务的安全性和可靠性&#xff0c;GB-T 43694-2024《网络安全技术 证书应用综合服务接口规范》应运而生。这份文件是 网络安全领域的标准之一&…

RK3568平台(camera篇)V4L2查询获取设置设备

一.查询设备能力VIDIOC_QUERYCAP struct v4l2_capability cap; ioctl(fd, VIDIOC_QUERYCAP, &cap) struct v4l2_capability 结构体描述了视频采集设备的 driver 信息。 struct v4l2_capability { __u8 driver[16]; // 驱动名字 __u8 card[32]; // 设备名字 __u8 bus_inf…

详解makefile中的foreach

在 Makefile 中&#xff0c;foreach 函数用于迭代处理一个以空格分隔的列表&#xff0c;并针对列表中的每个元素执行相同的操作。这个函数通常用于循环处理一组变量或文件名&#xff0c;并执行相同的规则或命令。 语法&#xff1a; makefile Copy Code $(foreach var, list, …

虚拟存储器:突破物理内存限制

目录 1. 基本概念 1.1 逻辑地址空间与物理地址空间 1.2 地址转换机制 2. 页式虚拟存储器 优点 缺点 3. 段式虚拟存储器和段页式虚拟存储器 段式虚拟存储器 段页式虚拟存储器 4. 虚存的替换算法 1. 概述 2.1 最近最久未使用&#xff08;LRU&#xff09;算法 2.2 最…

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台&#xff0c;该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块&#xff0c;具备数据采集、数据交换、超大规模计算、数据分析、数据应…

Typescript interface对象赋值引用还是拷贝的问题

在 TypeScript 中&#xff0c;将一个接口对象赋值给另一个变量时&#xff0c;实际上是传递引用而不是进行数据拷贝。也就是说&#xff0c;两个变量都引用同一个对象&#xff0c;因此对其中一个变量进行修改会影响到另一个变量。 示例 假设我们有一个接口 FontSizeEntity&…

防火墙如何端口映射?

防火墙端口映射&#xff08;Firewall Port Mapping&#xff09;是一种网络技术&#xff0c;通过对防火墙配置进行调整&#xff0c;允许外部网络用户访问内部网络中的指定端口。该技术使得外部用户可以通过公共网络访问内部网络中的特定服务或应用程序&#xff0c;从而实现远程访…

难兄难弟——Java中 goto 与 const关键字

目录 简洁版&#xff1a; 详解版&#xff1a; 一&#xff1a;goto 二&#xff1a;const 简洁版&#xff1a; 1&#xff1a; 在Java中&#xff0c;goto也是一个关键字&#xff0c;但是取消了goto的使用&#xff0c;使用循环标记进行代替&#xff1b; 2&#xff1a;在Java中&a…

Microsoft VBA Excel 去重+自动化配对信息

问题场景 A列数据中存在很多特别的情况&#xff1a; 中间分隔符为“/”&#xff0c;但是分隔符前后可能存在空格一个编号可能出现多次&#xff0c;例如示例中6003出现了5次可能为空&#xff0c;虽然节选的这部分没出现这种情况 B和C列数据中&#xff0c;会出现空格。 ABC60…

JavaScript--作用域是什么

作用域是什么 编译原理 在传统的编译语言中&#xff0c;程序中的一段源代码在执行之前会经历三个步骤。成为编译 分词/词法分析 这个过程由字符组成的字符串分解成有意义的代码块&#xff0c;这些代码块成为词法单元。 分词和词法分析之间的主要差异在于词法单元的识别是有…

实战指南:Vue 2基座 + Vue 3 + Vite + TypeScript微前端架构实现动态菜单与登录共享

实战指南&#xff1a;Vue 2基座 Vue 3 Vite TypeScript子应用vue2微前端架构实现动态菜单与登录共享 导读&#xff1a; 在当今的前端开发中&#xff0c;微前端架构已经成为了一种流行的架构模式。本文将介绍如何结合Vue 2基座、Vue 3子应用、Vite构建工具和TypeScript语言…