一、机器学习与sklearn简介

机器学习是人工智能的一个分支,它通过算法让计算机从数据中学习规律,并基于这些规律做出预测或决策。scikit-learn(简称sklearn)是Python中最流行的机器学习库之一,它提供了各种监督学习和无监督学习的算法实现。

sklearn的主要特点:

  • 简单高效的数据挖掘和数据分析工具

  • 基于NumPy、SciPy和matplotlib构建

  • 开源且商业可用 - BSD许可证

  • 丰富的算法支持:分类、回归、聚类、降维等

  • 完善的文档和丰富的社区资源

二、sklearn基础API结构

sklearn的API设计非常一致,主要包含以下几个核心接口:

  1. 估计器(Estimator): 用于拟合模型的任何对象,如分类器、回归器等

  2. 转换器(Transformer): 用于数据预处理和特征工程的估计器

  3. 预测器(Predictor): 能够进行预测的估计器

  4. 模型评估: 用于评估模型性能的工具

三、数据预处理API详解

1. 标准化 (StandardScaler)

from sklearn.preprocessing import StandardScaler"""
StandardScaler参数说明:
- copy : boolean, default=True是否创建数据的副本,如果为False,则在原始数据上执行标准化
- with_mean : boolean, default=True是否将数据居中(减去均值)
- with_std : boolean, default=True是否将数据缩放到单位方差
"""# 示例代码
scaler = StandardScaler(copy=True, with_mean=True, with_std=True)
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler.fit(data)  # 计算均值和标准差
print(scaler.mean_)  # 输出均值 [0.5 0.5]
print(scaler.scale_)  # 输出标准差 [0.5 0.5]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
输出标准化后的数据:
[[-1. -1.][-1. -1.][ 1.  1.][ 1.  1.]]
"""

2. 归一化 (MinMaxScaler) 

from sklearn.preprocessing import MinMaxScaler"""
MinMaxScaler参数说明:
- feature_range : tuple (min, max), default=(0, 1)期望的转换后数据范围
- copy : boolean, default=True是否创建数据的副本
"""scaler = MinMaxScaler(feature_range=(0, 1))
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler.fit(data)
print(scaler.data_min_)  # 输出最小值 [-1.  2.]
print(scaler.data_max_)  # 输出最大值 [ 1. 18.]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
输出归一化后的数据:
[[0.   0.  ][0.25 0.25][0.5  0.5 ][1.   1.  ]]
"""

四、监督学习API详解

1. 线性回归 (LinearRegression)

from sklearn.linear_model import LinearRegression"""
LinearRegression参数说明:
- fit_intercept : boolean, default=True是否计算此模型的截距
- normalize : boolean, default=False是否在回归前对回归变量X进行归一化
- copy_X : boolean, default=True是否复制X,否则可能会被覆盖
- n_jobs : int, default=None用于计算的作业数
"""# 示例代码
X = [[1, 1], [1, 2], [2, 2], [2, 3]]  # 特征
y = [1, 2, 2, 3]  # 目标值model = LinearRegression(fit_intercept=True, normalize=False)
model.fit(X, y)  # 拟合模型print(f"系数: {model.coef_}")  # 输出: [0.4 0.6]
print(f"截距: {model.intercept_}")  # 输出: 0.2
print(f"R²分数: {model.score(X, y)}")  # 输出: 0.8# 预测新数据
print(model.predict([[3, 5]]))  # 输出: [4.4]

2. 支持向量机分类 (SVC) 

from sklearn.svm import SVC"""
SVC参数说明:
- C : float, default=1.0正则化参数,强度与C成反比
- kernel : {'linear', 'poly', 'rbf', 'sigmoid'}, default='rbf'指定算法中使用的内核类型
- degree : int, default=3多项式核函数的次数('poly'时使用)
- gamma : {'scale', 'auto'} or float, default='scale'核系数
- probability : bool, default=False是否启用概率估计
"""# 示例代码
X = [[0, 0], [1, 1], [1, 0], [0, 1]]  # 特征
y = [0, 1, 1, 0]  # 类别标签model = SVC(C=1.0, kernel='rbf', gamma='scale', probability=False)
model.fit(X, y)  # 训练模型print("支持向量索引:", model.support_)  # 输出支持向量的索引
print("支持向量:", model.support_vectors_)  # 输出支持向量
print("各类的支持向量数量:", model.n_support_)  # 输出每类的支持向量数量# 预测新数据
print(model.predict([[0.5, 0.5]]))  # 输出: [1]

五、模型评估API详解

1. 交叉验证 (cross_val_score)

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier"""
cross_val_score参数说明:
- estimator : 估计器对象实现"fit"和"score"方法的对象
- X : 数组要拟合的数据
- y : 数组目标变量
- cv : int, 交叉验证生成器或可迭代对象, default=None确定交叉验证拆分策略
- scoring : str或可调用对象, default=None评分策略
- n_jobs : int, default=None并行运行的作业数
"""# 示例代码
X = [[0, 0], [1, 1], [2, 2], [3, 3]]  # 特征
y = [0, 1, 0, 1]  # 类别标签model = RandomForestClassifier(n_estimators=10)
scores = cross_val_score(model, X, y, cv=2, scoring='accuracy')print(f"交叉验证分数: {scores}")  # 输出类似: [1.  0.5]
print(f"平均分数: {scores.mean():.2f}")  # 输出类似: 0.75

2. 分类报告 (classification_report) 

from sklearn.metrics import classification_report
from sklearn.svm import SVC# 示例代码
X_train = [[0, 0], [1, 1], [2, 2], [3, 3]]
y_train = [0, 1, 0, 1]
X_test = [[0.5, 0.5], [2.5, 2.5]]
y_test = [0, 1]model = SVC().fit(X_train, y_train)
y_pred = model.predict(X_test)report = classification_report(y_test, y_pred)
print(report)
"""
输出:precision    recall  f1-score   support0       1.00      1.00      1.00         11       1.00      1.00      1.00         1accuracy                           1.00         2macro avg       1.00      1.00      1.00         2weighted avg       1.00      1.00      1.00         2
"""

六、无监督学习API详解

1. K-Means聚类

from sklearn.cluster import KMeans"""
KMeans参数说明:
- n_clusters : int, default=8要形成的簇数
- init : {'k-means++', 'random'}, default='k-means++'初始化方法
- n_init : int, default=10使用不同质心种子运行算法的次数
- max_iter : int, default=300单次运行的最大迭代次数
- tol : float, default=1e-4收敛阈值
"""# 示例代码
X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]model = KMeans(n_clusters=2, init='k-means++', n_init=10)
model.fit(X)print("簇中心:", model.cluster_centers_)
print("预测标签:", model.labels_)
print("预测新数据:", model.predict([[0, 0], [4, 4]]))
"""
输出示例:
簇中心: [[1. 2.] [4. 2.]]
预测标签: [0 0 0 1 1 1]
预测新数据: [0 1]
"""

2. 主成分分析 (PCA) 

from sklearn.decomposition import PCA"""
PCA参数说明:
- n_components : int, float or 'mle', default=None保留的主成分数量
- copy : bool, default=True是否在运行算法时保留原始数据
- whiten : bool, default=False是否白化数据
- svd_solver : {'auto', 'full', 'arpack', 'randomized'}, default='auto'使用的SVD求解器
"""# 示例代码
X = [[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]pca = PCA(n_components=1)
pca.fit(X)
print("解释方差比例:", pca.explained_variance_ratio_)  # 输出: [0.9924...]
print("主成分:", pca.components_)  # 输出: [[-0.838 -0.545]]X_transformed = pca.transform(X)
print("降维后的数据:", X_transformed)
"""
输出示例:
降维后的数据: [[ 1.383][ 2.222][ 3.605][-1.383][-2.222][-3.605]]
"""

七、模型选择与参数调优

1. 网格搜索 (GridSearchCV)

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC"""
GridSearchCV参数说明:
- estimator : 估计器对象实现"fit"和"score"方法的对象
- param_grid : dict或列表参数名到参数值列表的映射
- cv : int, 交叉验证生成器或可迭代对象, default=None确定交叉验证拆分策略
- scoring : str或可调用对象, default=None评分策略
- n_jobs : int, default=None并行运行的作业数
"""# 示例代码
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = SVC()
clf = GridSearchCV(svc, parameters, cv=5)
clf.fit([[0, 0], [1, 1], [2, 2], [3, 3]], [0, 1, 0, 1])print("最佳参数:", clf.best_params_)
print("最佳分数:", clf.best_score_)
print("最佳估计器:", clf.best_estimator_)
"""
输出示例:
最佳参数: {'C': 1, 'kernel': 'linear'}
最佳分数: 0.75
最佳估计器: SVC(C=1, kernel='linear')
"""

八、sklearn使用最佳实践

  1. 数据预处理:始终对数据进行适当的缩放和归一化

  2. 训练测试分割:在训练前分割数据,避免数据泄露

  3. 交叉验证:使用交叉验证评估模型性能

  4. 参数调优:使用网格搜索或随机搜索优化超参数

  5. 模型持久化:使用joblib保存训练好的模型

  6. 特征工程:尝试不同的特征提取和选择方法

  7. 集成方法:考虑使用集成方法提高模型性能

# 示例:完整机器学习流程
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report
from joblib import dump# 加载数据
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
)# 数据预处理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 训练模型
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train_scaled, y_train)# 评估模型
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))# 保存模型
dump(model, 'iris_classifier.joblib')

九、总结

scikit-learn提供了强大而一致的API接口,使得机器学习模型的实现变得简单高效。通过本文的详细讲解和代码示例,你应该已经掌握了:

  1. sklearn的基本结构和设计理念

  2. 数据预处理的关键API及其参数

  3. 监督学习和无监督学习的主要算法实现

  4. 模型评估和参数调优的方法

  5. 完整的机器学习流程实现

在实际应用中,建议多参考sklearn的官方文档,并根据具体问题选择合适的算法和参数。机器学习是一个实践性很强的领域,多动手尝试不同的方法和参数组合,才能更好地掌握这些工具。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

「日拱一码」015 机器学习常用库——scikit-learn

目录 数据预处理 数据标准化(StandardScaler) 数据归一化(MinMaxScaler) 数据离散化(KBinsDiscretizer) 缺失值处理(SimpleImputer) 特征选择 基于单变量特征选择&#xff08…

网络编程学习路线

C网络编程从零基础到精通的学习路线,每一步都和你的项目实际需求紧密结合,帮助你真正做到“学以致用”。 C网络编程学习路线(结合FileHub项目) 第一阶段:网络编程基础入门 1. 计算机网络基础 理解OSI七层模型、TCP/I…

NLP:文本张量表示方法

本文目录: 一、one-hot编码二、word2vec模型(一)概念1.CBOW(Continuous bag of words)模式2.skipgram模式:3.词向量的检索获取 (二)word2vec的训练和使用1. 获取训练数据2.查看原始数据3.原始数据处理,并查…

高阶数据结构------并查集

并查集 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个集合,然后按照一定的规律将归于同一组的元素集合合并。在此过程中要反复用到查询某一个元素归属于哪一个集合的运算。适合于描述这类问题的抽象…

OWASP Top 10 是什么?

OWASP(Open Web Application Security Project,开放Web应用安全项目)是一个致力于提高软件安全性的国际非营利组织。其发布的 ​OWASP Top 10​ 是最具影响力的Web应用安全风险清单,每3-4年更新一次,帮助开发人员、安全…

如何在IIS上部署net系统(安装iis参考上一篇)

1.对后端项目打包,我使用的时rider 2.打包前端 npm run build 3.在iis上部署 网站-添加网站 4.选择之前打包的后端文件,设置端口 5.安装对应net环境插件:主要是runtime和sdk插件以及dotnet-hosting-2.2.0-win,具体版本看自己项…

Docker可视化管理工具Portainer安装部署

1、安装Portainer 编写docker compose文件,使用docker compose文件完成Portainer的安装,首先需要在服务器上编写的名为portainer.yaml的文件,内容如下: [rootserver ~]# cat portainer.yaml services: portainer: image:…

ai之RAG本地知识库--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 认识和源码剖析

目录标题 RAG本地知识库问答——基于OCR和文本解析器的新一代RAG引擎:RAGFlow 认识和源码剖析RAGflow 主要功能: 一、RAGflow 简介1.1 允许用户上传并管理自己的文档(文档类型可以是任意类型)1.2 RAGFlow的4个特色1.2.1 AI 模型的智能文档处理系统1.2.2 …

[面试] 手写题-new

function mynew(Func, ...args) {// 1.创建一个空对象const obj {}// 2.新对象隐式原型指向构造函数的显式原型obj.__proto__ Func.prototype// 3.将构建函数的this指向新对象let result Func.apply(obj, args)// 4.返回objreturn result instanceof Object ? result : obj…

设计模式精讲 Day 20:状态模式(State Pattern)

【设计模式精讲 Day 20】状态模式(State Pattern) 文章标签 设计模式, 状态模式, Java开发, 面向对象设计, 软件架构, 设计模式实战, Java应用开发 文章简述 状态模式是行为型设计模式中的重要一员,用于管理对象在不同状态下的行为变化。在…

桥岛隧大型工程 3D 可视化监测平台

深中通道作为“桥、岛、隧、水下互通”一体化跨海集群工程,其复杂结构带来高强度监测难题。借助图扑软件 HT 实现深中通道的建设与运营的数字化升级,为交通基建行业迈向高效、智能的未来提供了有力支撑。 图扑自主研发的 HT for Web 产品搭建深中通道-桥…

基于SpringBoot和Leaflet的区域冲突可视化系统(2025企业级实战方案)

摘要 在全球地缘冲突与应急事件频发的2025年,区域态势可视化系统成为政府及企业的决策刚需。本文提出基于​​SpringBoot 3.2​​后端与​​Leaflet 1.9.5​​前端的冲突可视化解决方案,融合多源异构数据(卫星影像、舆情热力、设施状态&…

[密码学实战]国密TLCP协议报文解析代码实现(三十)

[密码学实战]国密TLCP协议报文解析代码实现(三十) 本文将深入解析国密TLCP协议报文结构,提供完整的Java实现代码,帮助开发者理解TLCP协议在国密环境下的通信机制和安全性设计。 一、国密TLCP协议概述 TLCP(Transport Layer Cryptographic Protocol)是基于国密算法(SM2/…

[Python] -基础篇5-玩转Python内置数据结构:列表、元组、字典与集合

Python 是一门以简洁优雅著称的编程语言,其中内置的数据结构为日常编程提供了强大支持。本文将系统介绍 Python 中四大核心数据结构:列表(list)、元组(tuple)、字典(dict)与集合(set),并配以实用示例,帮助读者全面掌握其用法及适用场景。 一、列表(List):可变序…

技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第八篇(排名不分先后)】

HiP-AD: Hierarchical and Multi-Granularity Planning with Deformable Attention for Autonomous Driving in a Single Decoder GitHub地址:​https://github.com/nullmax-vision/HiP-AD​ 在自动驾驶技术飞速发展的今天,端到端自动驾驶(E…

transformer位置编码研究相关的综述、论文

一、权威综述 《利用位置编码实现长度外推》 (腾讯云开发者社区, 2024) 系统分析绝对/相对位置编码(APE/RPE)在长序列外推中的技术演进,涵盖RoPE、Alibi、Xpos等优化方案,讨论位置插值、NTK-aware缩放等扩展…

垂直领域AI智能体开发指南:用Bright Data MCP接入智能体攻克数据难关

垂直领域AI智能体开发指南:用Bright Data MCP接入智能体攻克数据难关 一、智能体时代的数据困局1.1 AI智能体的爆发式增长1.2 开发者遭遇的"数据瓶颈" 二、Bright Data MCP:智能体的数据引擎2.1 重新定义数据获取方式2.2 支持的核心场景2.3 四…

Stable Diffusion 项目实战落地:从0到1 掌握ControlNet 第三篇: 打造光影字形的创意秘技-文字与自然共舞

上一篇,我们一起玩转了 野外光影字,是不是被那种自然和光影交织的效果惊艳到啦? 如果你错过了那篇文章,别担心,赶紧点这里补课:Stable Diffusion 项目实战落地:从0到1 掌握ControlNet:打造光影文字 第二篇 - 野外光影字。 今天,我们将一起做一个 生成的嵌入式文字【…

CppCon 2018 学习:Feather: A Modern C++ Web Development Framework

你这段内容罗列的是 Web 开发中的几个基础概念和组成模块,下面我逐一用中文进行解释,并理清它们之间的关系: 基础概念说明 1. HTTP Server(HTTP服务器) 是一个监听 HTTP 请求并返回响应的程序。主要功能&#xff1a…

武汉大学机器人学院启航:一场颠覆性的产教融合实验,如何重塑中国智造未来?

当百年学府按下“产业加速键”,教育革命的号角已经吹响 2025年7月,武汉大学一纸公告震动教育界与科技圈——成立机器人学院,携手小米、宇树等硬科技领军企业,聘请10位产业教授入驻。这绝非一次常规的校企合作,而是一场…