Scikit-Learn 基础教程

news2024/11/19 9:20:53

目录

🐋Scikit-Learn 基础教程

🐋Scikit-Learn 简介

🐋 数据预处理

🦈数据集导入

🦈数据清洗

🦈特征选择

🦈特征标准化

🐋 模型选择

🦈分类模型

🦈回归模型

🦈聚类模型

🐋模型训练与评估

🦈交叉验证

🦈超参数调优

🐋 模型保存与加载

🐋 实战案例

🦈分类问题:手写数字识别

🦈回归问题:波士顿房价预测

🦈聚类问题:鸢尾花数据集聚类分析

🐋总结


🐋Scikit-Learn 基础教程

  • Scikit-Learn(简称 sklearn)是一个基于 Python 的机器学习库。它构建在 NumPy、SciPy 和 Matplotlib 之上,为各种机器学习任务提供了简单而高效的工具。本文将详细解析 Scikit-Learn 的基础知识,并通过具体示例来展示其应用。

🐋Scikit-Learn 简介

  • Scikit-Learn 是一个开源的机器学习库,由 David Cournapeau 在 2007 年创建,并在 2010 年由 INRIA 进行发布。它以其简单易用、丰富的功能和良好的文档支持,成为了机器学习领域的重要工具。

Scikit-Learn 提供了以下主要功能:

  • 数据预处理:包括特征提取、归一化和降维等。
  • 模型选择:支持多种分类、回归和聚类算法。
  • 模型评估:提供了丰富的模型评估指标和交叉验证方法。
  • 模型调优:支持网格搜索和随机搜索等超参数调优方法。
  • 模型持久化:支持模型的保存和加载。

🐋 数据预处理

  • 数据预处理是机器学习流程中的重要环节,旨在将原始数据转换为适合模型训练的数据形式。Scikit-Learn 提供了一系列工具来简化这一过程。

🦈数据集导入

  • Scikit-Learn 提供了一些常用数据集,可以通过 datasets 模块直接加载。此外,还可以从 CSV、Excel 等文件中导入数据。
from sklearn import datasets

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

🦈数据清洗

  • 数据清洗包括处理缺失值、去除重复数据等。可以使用 pandas 库进行数据清洗。
import pandas as pd
from sklearn.impute import SimpleImputer

# 加载数据
data = pd.read_csv('data.csv')

# 填补缺失值
imputer = SimpleImputer(strategy='mean')
data_imputed = imputer.fit_transform(data)

🦈特征选择

  • 特征选择是从大量特征中选出对模型训练最有用的特征,Scikit-Learn 提供了多种特征选择方法,如基于方差、相关系数等。
from sklearn.feature_selection import SelectKBest, f_classif

# 选择前 3 个最佳特征
selector = SelectKBest(score_func=f_classif, k=3)
X_new = selector.fit_transform(X, y)

🦈特征标准化

  • 特征标准化是将数据缩放到相同尺度,以提高模型训练效果。常用的标准化方法有 MinMaxScaler、StandardScaler 等。
from sklearn.preprocessing import StandardScaler

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

🐋 模型选择

  • Scikit-Learn 提供了多种机器学习模型,包括分类、回归和聚类模型。选择适合的模型是机器学习的关键步骤。

🦈分类模型

  • 分类模型用于解决离散标签的预测问题。常用的分类模型有逻辑回归、支持向量机、决策树、随机森林等。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

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

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归模型

  • 回归模型用于预测连续值。常用的回归模型有线性回归、岭回归、Lasso 回归等。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = datasets.load_boston()
X, y = boston.data, boston.target

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

# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

🦈聚类模型

  • 聚类模型用于将数据分组,常用的聚类模型有 KMeans、DBSCAN、层次聚类等。
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 训练 KMeans 模型
model = KMeans(n_clusters=3, random_state=42)
model.fit(X)

# 获取聚类结果
labels = model.labels_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()

🐋模型训练与评估

🦈交叉验证

  • 交叉验证是一种评估模型性能的技术,通过多次训练和测试来获得更稳定的评估结果。Scikit-Learn 提供了 cross_val_score 函数进行交叉验证。
from sklearn.model_selection import cross_val_score

# 进行 5 折交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f"Cross-validation scores: {scores}")
print(f"Mean score: {scores.mean()}")

🦈超参数调优

  • 超参数调优是通过调整模型的超参数来提升模型性能。Scikit-Learn 提供了网格搜索和随机搜索方法。
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'C': [0.1, 1, 10, 100],
    'solver': ['lbfgs', 'liblinear']
}

# 进行网格搜索
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 最佳参数
print(f"Best parameters: {grid_search.best_params_}")

🐋 模型保存与加载

  • Scikit-Learn 提供了简单的模型保存和加载方法,通过 joblib 库实现。
import joblib

# 保存模型
joblib.dump(model, 'model.pkl')

# 加载模型
loaded_model = joblib.load('model.pkl')

🐋 实战案例

🦈分类问题:手写数字识别

  • 手写数字识别是经典的分类问题,可以使用 MNIST 数据集进行演示。
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier

# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target

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

# 训练 KNN 分类器
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归问题:波士顿房价预测

  • 波士顿房价预测是经典的回归问题,使用线性回归模型进行演示。
# 已在上文演示

🦈聚类问题:鸢尾花数据集聚类分析

  • 使用 KMeans 对鸢尾花数据集进行聚类分析。
# 已在上文演示

🐋总结

  • 通过本文的介绍,我们了解了 Scikit-Learn 的基本功能和使用方法。Scikit-Learn 提供了从数据预处理、模型选择、模型训练到模型评估和调优的全流程支持,极大地简化了机器学习的实现过程。希望通过本文的学习,读者能更好地掌握 Scikit-Learn,并应用于实际的机器学习任务中。

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

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

相关文章

Resilience4j结合微服务出现的异常

Resilience4j结合微服务出现的异常 1、retry未生效 由于支持aop&#xff0c;所以要引入aop的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、circ…

解决:【无法安装“vue.volar“扩展,因为它与当前 VIsual Studio Code 版本不兼容(版本 1.80.0)】

目录 问题复现问题分析解决步骤1、进入VSCode插件市场&#xff0c;搜索Vue.volar2、点击搜索结果&#xff0c;进入详情页面3、下载.vsix文件完成后&#xff0c;用解压软件打开 4、复制package.json文件&#xff0c;修改vscode版本5、保存package.json文件&#xff0c;并更新.v…

2024 HN CTF WebMisc 部分 wp

Web ez_tp 判断是thinkphp 3.2 参考官方手册:https://www.kancloud.cn/manual/thinkphp/1697 判断路由模式 URL_CASE_INSENSITIVE > true, // 默认false 表示URL区分大小写 true则表示不区分大小写URL_MODEL > 1, // URL访问模式,可选参数0、1、…

cURL error 60: SSL certificate problem: unable to get local issuer certifica

本地小程序把接口换到本地的服务器接口&#xff0c;然后就报错了&#xff1a; cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 经查询查到&#xff1a;此问题的出现是由于没有配…

第八十九周周报

学习目标&#xff1a; 论文 学习时间&#xff1a; 2024.05.25-2024.05.31 学习产出&#xff1a; 一、论文 SAN: INDUCING METRIZABILITY OF GAN WITH DISCRIMINATIVE NORMALIZED LINEAR LAYER 将GAN与切片最优输运联系起来&#xff0c;提出满足方向最优性、可分离性和单射…

数据资产价值如何评估?一文详解如何构建数据资产评估的综合框架

数据资产&#xff0c;如同其构成的数据本身&#xff0c;具备物理、存在和信息三重属性。数据资产的物理属性体现在其对存储空间的占用&#xff1b;其存在属性则体现在数据的可读取性上&#xff0c;若数据无法读取&#xff0c;则其作为资产的价值便无从体现。这两个属性共同构成…

LeetCode 算法: 字母异位词分组c++

原题链接&#x1f517;&#xff1a;字母异位词分组 难度&#xff1a;中等⭐️⭐️ 题目 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“e…

centos7.9离线安装mysql5.7

centos7.9离线安装mysql5.7 查询mysql查询组查询用户不存在创建即可&#xff0c;创建mysql用户组上传下载的安装包创建my.cnf文件修改配置文件修改mysql登陆密码 centos7.9 mysql5.7 查询mysql rpm -qa | grep mysql我这里查询是不存在&#xff0c;如果你的存在可以用rm -rf […

云原生架构相关技术_4.服务网格

1.技术特点 服务网格&#xff08;ServiceMesh&#xff09;是分布式应用在微服务软件架构之上发展起来的新技术&#xff0c;旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施&#xff0c;实现应用与平台基础设施的解耦。这个解耦意味着开发者无需…

ROS2在RVIZ2中加载机器人urdf模型

参考ROS2-rviz2显示模型 我这边用的solid works生成的urdf以及meshes&#xff0c;比参考的方法多了meshes 问题一&#xff1a;Error retrieving file [package://rm_dcr_description/meshes/leftarm_link7.STL]: Package [rm_dcr_description] does not exist 这个是urdf模型中…

react 怎样配置ant design Pro 路由?

Ant Design Pro 是基于 umi 和 dva 的框架&#xff0c;umi 已经预置了路由功能&#xff0c;只需要在 config/router.config.js 中添加路由信息即可。 例如&#xff0c;假设你需要为 HelloWorld 组件创建一个路由&#xff0c;你可以将以下代码添加到 config/router.config.js 中…

AngularJS基础语法(2009版本)

jquery和AngularJS 数据绑定和获取对比&#xff1a; jquery&#xff0c;要操作DOM&#xff1a; angularJS&#xff0c;无需操作DOM就可以进行动态数据变化&#xff1a; 要使用Angularjs就需要在html页面先引入&#xff1a; ng-app&#xff1a; html页面中&#xff0c;需要给…

html期末复习速览

一.基础标签 1.段落标签<p></p> 特点&#xff1a;分段分割 2.标题标签<h1></h1>……<h6></h6> 特点&#xff1a;文字加粗&#xff0c;单独占一行 3.换行标签<br /> 特点&#xff1a;单标签&#xff0c;强制换行 二.文本格式化…

数据结构与算法笔记:基础篇 - 数组:为什么数组都是从0开始编号

概述 提到数组&#xff0c;大家应该都不陌生。每一种编程语言基本都会有数组这种数据类型。不过&#xff0c;它不仅仅是一种编程语言中的数据类型&#xff0c;还是一种基础的数据结构。尽管数组看起来非常简单&#xff0c;但是我估计很多人并没有理解这个数据结构的精髓。 在…

ros DWA局部规划模块

ROS-DWA模块 主要流程DWAPlannerROS::computeVelocityCommandsDWAPlannerROS::dwaComputeVelocityCommandsDWAPlanner::findBestPathSimpleScoredSamplingPlanner::findBestTrajectory 调参技巧DWA被目标点过度吸引&#xff0c;且不听全局规划器指挥 消融实验goal_front_costs_…

写大型C工程makefile构建~

正文 最开始学习linux应用开发编写的时候&#xff0c;估计大部分伙伴们都是在一个目录里面编译整个工程&#xff0c;主要是linux通常没有非常合适的集成开发环境。 以前单目录的方式实在太过捡漏&#xff0c;在linux环境中进行C代码工程开发很多时候需要编写一个相对比较通用的…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件&#xff0c;会有一些改动&#xff0c;到8.x我发现又有一些变化&#xff0c;记录一下&#xff0c;防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

SwiftUI中Popover的使用(弹出方式,箭头位置,如何退出)

在iOS中&#xff0c;popover是出现在现有内容顶部的UI元素&#xff0c;通常用于在上下文中向用户呈现新视图。与其他占用整个屏幕的视图控制器不同&#xff0c;popover出现在一个较小的、集中的区域&#xff0c;从而使用户能够在必要时与popover外的应用程序的其他部分进行交互…

C#的web项目ASP.NET

添加实体类和控制器类 using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace WebApplication1.Models {public class Company{public string companyCode { get; set; }public string companyName { get; set; }public string com…

国产飞腾/龙芯/瑞芯微芯片在信创行业应用:金融行业、教育行业、党政机关

党政机构 方案背景&#xff1a; 在国家提出信息技术应用创新发展战略的大环境下&#xff0c;政务大厅需要基于国家科技自主技术深入推进“互联网政务服务”。加快建设全国一体化在线政务服务平台&#xff0c;进一步落实创新驱动发展战略&#xff0c;提升政务网络安全保障能力…