【sklearn | 7】:scikit-learn项目实战指南

在这里插入图片描述

引言

在数据科学和机器学习领域,Python以其简洁的语法和强大的库支持,成为了许多开发者和研究者的首选语言。而在众多Python机器学习库中,scikit-learn以其易用性、灵活性和强大的算法集合,成为了最受欢迎的库之一。本文将深入探讨scikit-learn的原理和应用,并通过项目案例展示其在实际问题解决中的强大能力。

一、scikit-learn简介

scikit-learn是一个基于Python的开源机器学习库,建立在NumPy、SciPy和matplotlib这些科学计算库之上。它提供了简单而高效的数据挖掘和数据分析工具,包括分类、回归、聚类和降维等机器学习算法。

二、原理介绍

2.1. 算法基础

scikit-learn实现了多种机器学习算法,包括但不限于:

  • 线性模型:如线性回归、逻辑回归等。
  • 决策树:用于分类和回归问题。
  • 支持向量机(SVM):用于分类和回归问题。
  • 随机森林:一种集成学习方法,由多个决策树组成。
  • 聚类算法:如K-means、层次聚类等。
  • 降维技术:如主成分分析(PCA)和线性判别分析(LDA)。

2.2. 模型训练与评估

scikit-learn提供了统一的接口来训练模型和评估模型性能。使用fit方法训练模型,使用predict方法进行预测。此外,scikit-learn还提供了多种评估指标,如准确率、召回率、F1分数等,以及交叉验证工具来评估模型的泛化能力。

2.3. 特征工程

特征工程是机器学习中的关键步骤,scikit-learn提供了丰富的特征提取和转换工具,如:

  • 特征选择:选择对模型性能影响最大的特征。
  • 特征提取:从原始数据中提取新特征。
  • 特征缩放:标准化或归一化特征,以提高模型性能。

三、项目案例概况

3.1. 鸢尾花分类

使用scikit-learn进行鸢尾花(Iris)数据集的分类。通过逻辑回归、决策树或随机森林等算法,实现对鸢尾花种类的准确预测。

3.2. 房价预测

构建一个回归模型来预测房价。使用波士顿房价数据集,通过特征选择和模型调优,提高预测的准确性。

3.3. 客户细分

使用K-means聚类算法对客户数据进行细分,帮助企业更好地了解客户群体,实现精准营销。

四、实践建议

  • 数据理解:深入理解数据集的特征和分布,为特征工程和模型选择提供依据。
  • 模型选择:根据问题类型选择合适的算法。
  • 参数调优:使用网格搜索(GridSearchCV)等技术进行参数调优,以获得最佳模型性能。
  • 模型评估:使用交叉验证等方法评估模型的泛化能力。

下面让我们通过具体的项目案例来展示scikit-learn的使用。以下是一个使用scikit-learn进行鸢尾花(Iris)数据集分类的简单示例。

五、案例详解1:鸢尾花数据集分类

5.1. 数据加载

首先,我们需要加载鸢尾花数据集。scikit-learn提供了内置的数据集加载功能。

from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target

5.2. 数据探索

在进行模型训练之前,了解数据集的基本统计信息是很有帮助的。

print("Feature names:", iris.feature_names)
print("Target names:", iris.target_names)
print("Shape of the data:", X.shape)

5.3. 数据划分

将数据集划分为训练集和测试集。

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

5.4. 模型选择

选择一个分类器,这里我们使用决策树分类器。

from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier(random_state=42)

5.5. 模型训练

使用训练集数据训练模型。

clf.fit(X_train, y_train)

5.6. 模型评估

评估模型在测试集上的性能。

from sklearn.metrics import classification_report, accuracy_scorey_pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

5.7 特征重要性

查看决策树分类器中各个特征的重要性。

importances = clf.feature_importances_
feature_names = iris.feature_namesprint("Feature importances:")
for name, importance in zip(feature_names, importances):print(f"{name}: {importance}")

5.8 可视化决策树

使用plot_tree函数可视化决策树。

from sklearn.tree import plot_tree
import matplotlib.pyplot as pltplt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=feature_names, class_names=iris.target_names)
plt.show()

这个案例展示了如何使用scikit-learn进行一个简单的机器学习项目,从数据加载到模型训练、评估和可视化。在实际应用中,你可能还需要进行更多的数据预处理、特征工程、模型调优和验证步骤。

请注意,为了运行上述代码,你需要安装scikit-learn和matplotlib库。如果你还没有安装,可以通过以下命令安装:

pip install scikit-learn matplotlib

5.9完整代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, accuracy_score
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 将数据转换为Pandas DataFrame
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y# 数据划分
X_train, X_test, y_train, y_test = train_test_split(df.iloc[:, :-1], df['target'], test_size=0.3, random_state=42)# 创建决策树分类器
clf = DecisionTreeClassifier(random_state=42)# 训练模型
clf.fit(X_train, y_train)# 预测测试集
y_pred = clf.predict(X_test)# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))# 特征重要性
importances = clf.feature_importances_
feature_names = iris.feature_namesprint("Feature importances:")
for name, importance in zip(feature_names, importances):print(f"{name}: {importance}")# 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=feature_names, class_names=iris.target_names)
plt.show()

这个案例仅提供了一个基础的框架,实际项目中可能需要根据具体需求进行调整和优化。

让我们通过一个更复杂的项目案例来展示scikit-learn的应用:使用机器学习进行房价预测。这个案例将包括数据预处理、特征工程、模型选择、参数调优和模型评估。

六、项目案例2:房价预测

6.1 数据加载与初步探索

加载波士顿房价数据集,并进行初步的数据探索。

from sklearn.datasets import load_boston
import pandas as pdboston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.targetprint(df.head())
print(df.describe())

6.2 数据预处理

处理缺失值和异常值,如果需要的话,进行数据标准化。

# 检查缺失值
print(df.isnull().sum())# 标准化特征
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
features = df.columns[:-1]  # 假设最后一列是目标变量
df[features] = scaler.fit_transform(df[features])

6.3 特征工程

创建新特征或转换现有特征以提高模型性能。

# 假设我们创建一个新特征,例如房屋平均房间数
df['AveRooms'] = df['RM'] / df['TAX']

6.4 数据划分

将数据集划分为训练集和测试集。

from sklearn.model_selection import train_test_splitX = df[features]
y = df['MEDV']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

6.5 模型选择与参数调优

选择多个模型,使用网格搜索进行参数调优。

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error# 定义模型和参数网格
model = RandomForestRegressor(random_state=42)
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10]
}# 网格搜索
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)# 最佳参数
print("Best parameters:", grid_search.best_params_)

6.6 模型训练与评估

使用最佳参数训练模型,并在测试集上评估性能。

best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)# 评估模型
print("Mean squared error:", mean_squared_error(y_test, y_pred))

6.7 结果分析

分析模型预测结果,如残差图等。

import numpy as np
import matplotlib.pyplot as pltresiduals = y_test - y_pred
plt.scatter(y_test, residuals)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('Observed')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.show()

6.8 模型优化

根据模型评估结果,考虑进一步优化模型,例如特征选择、模型融合等。

6.9 部署

最后,将训练好的模型部署到生产环境中,进行实时预测。

这个案例展示了一个更复杂的机器学习项目流程,包括数据预处理、特征工程、模型选择和调优、评估和结果分析。在实际项目中,可能还需要考虑模型的可解释性、模型的在线更新、大规模数据处理等问题。

6.10 完整代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt# 加载数据
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target# 数据预处理
# 标准化特征
scaler = StandardScaler()
features = df.columns[:-1]  # 假设最后一列是目标变量
df[features] = scaler.fit_transform(df[features])# 数据划分
X = df[features]
y = df['MEDV']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建随机森林回归器
model = RandomForestRegressor(random_state=42)# 参数网格
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10]
}# 网格搜索
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)# 最佳参数
print("Best parameters:", grid_search.best_params_)# 使用最佳参数训练模型
best_model = grid_search.best_estimator_# 预测测试集
y_pred = best_model.predict(X_test)# 评估模型
print("Mean squared error:", mean_squared_error(y_test, y_pred))# 残差图
residuals = y_test - y_pred
plt.scatter(y_test, residuals)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('Observed')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.show()

七、结语

这两个示例展示了如何使用scikit-learn进行基本的机器学习任务。第一个示例是鸢尾花数据集的分类任务,第二个示例是波士顿房价数据集的回归任务。希望这些示例能帮助你更好地理解scikit-learn的使用。
scikit-learn作为Python中功能最全面、使用最广泛的机器学习库之一,其易用性和强大的算法集合使其成为机器学习入门和实践的不二之选。通过本文的介绍,希望你能对scikit-learn有更深入的了解,并在实际项目中发挥其强大功能。

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

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

相关文章

【驱动程序】霍尔编码器电机_CubeMX_HAL库

【驱动程序】霍尔编码器电机_CubeMX_HAL库 电机型号:MG310 霍尔编码器电机 驱动模块:L298N 接线 注: L298N 12V接线柱位置可以接50V~5V当跳线帽接入时,5V接线柱为5V输出,可以给驱动板供电当跳线帽拔出时&#xff0…

内部类+图书管理系统

内部类图书管理系统 1. 实例内部类1.1 实例内部类的结构1.2 实例内部类的一些问题1.2.1 如何在main中创建实例内部类对象?1.2.2 内部类成员变量被static修饰问题?1.2.3 内部类和外部类变量重名的调用问题?1.2.4 外部类访问内部类变量的问题 2…

电商人批量下载神器阿里国际高清主图、详情图、sku及视频信息

电商领域,图片是商品静默的推销员。高质量的图片能吸引顾客目光,传达商品信息,提升购买欲望。它影响产品的第一印象,直接关联转化率和销售额。简而言之,优质图片对电商至关重要。 使用图快下载器,小编给大…

彻底解决idea的编解码问题

一、打开idea,找到Setting,点击File Encoding编解码设置,将以下标红的三个部分全部设置为UTF-8.同理如果你的项目使用的是GBK或者其他编码格式,那么也设置为统一。 二、点击Java Compiler设置补齐-encoding utf-8参数 三、如果你的项目使用到…

基于PHP+MYSQL开发制作的趣味测试网站源码

基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要…

Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题,通过各种排除最终定位到了Redis的内存碎片的问题,这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。 Redis的内存碎片原理 先引用Redis官方的原话: 当键被删除时,Redis …

微服务:nacos

Nacos 由Alibaba推出的集成于SpringCloudAlibaba中的一款开源注册中心框架 主要功能: 注册中心 配置管理 nacos的安装和部署 nacos默认访问端口8848 docker pull nacos/nacos-server:1.2.0 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8…

uniapp H5 如何根据接口返回form表单,跳转银联支付界面?

uniapp如何根据form表单,唤醒第三方支付? 文章目录 uniapp如何根据form表单,唤醒第三方支付?效果图实现 效果图 接口返回 form 表单数据 实现 // 例请求成功,返回数据 rechargePay({}).then(res > {// 接收接口返回数据let { result …

JavaScript 获取 url(get)参数

https://andi.cn/page/621584.html

【贪心算法】力扣1481.不同整数的最少数目

给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素,请找出移除后数组中不同整数的最少数目。 示例 1: 输入:arr [5,5,4], k 1 输出:1 解释:移除 1 个 4 ,数组中只剩下 5 一种整数。…

【BUG】已解决:zipfile.BadZipFile: File is not a zip file

已解决:zipfile.BadZipFile: File is not a zip file 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发…

[word] word表格跨页断开实现教程 #职场发展#媒体

word表格跨页断开实现教程 选中整个word表格 单击鼠标右键,选择“表格属性”选项 切换至“行”标签,找到“允许跨页断行”选项 勾选上“允许跨页断行”,单击“确定”按钮,完成! word表格跨页断开实现教程的下载地址&a…

经典神经网络(14)T5模型原理详解及其微调(文本摘要)

经典神经网络(14)T5模型原理详解及其微调(文本摘要) 2018 年,谷歌发布基于双向 Transformer 的大规模预训练语言模型 BERT,而后一系列基于 BERT 的研究工作如春笋般涌现,预训练模型也成为了业内解决 NLP 问题的标配。 2019年,谷歌…

关于Centos停更yum无法使用的解决方案

最近在使用Centos7.9系统时候,发现yum仓库无法进行安装软件包了,官方说2024年6月30日进行停更,停更后无法提供对应的软件服务。 我在使用yum安装包的时候发现确实不能使用官方服务了: CentOS停更的影响 CentOS停止更新之后&#…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

【技术追踪】TeethDreamer:从 5 张口腔照片实现三维牙齿重建(MICCAI-2024)

三维重建搞起来~ TeethDreamer:一种3D牙齿重建新框架,旨在恢复上下牙齿的形状和位置,引入大型扩散模型的先验知识和3D感知特征注意力机制,重建性能表现SOTA! 论文:TeethDreamer: 3D Teeth Reconstruction f…

VS2019+CMake+Vtk9.3.0+Qt5.14.2 配置

VS2019CMakeVtk9.3.0Qt5.14.2 配置环境 第一步 下载 基本配置 系统环境:windows11 x64 Qt:5.14.2 这是最后最新的LTS qt离线版本,后续版本都需要在线安装,同时使用qt5.14也避免版权问题。 Qt 5.14:大部分模块基于LG…

ROS服务通信机制实操C++

ROS服务通信实操C 步骤流程VScode 配置服务端客户端编辑配置文件编译并执行优化实现参数的动态提交优化先启动客户端后启动服务端 ROS服务通信的理论查阅:ROS服务通信流程理论 ROS服务通信的自定义srv数据的准备可以查阅:ROS服务通信自定义srv 在模型实…

使用Docker 实现 MySQL 循环复制(三)

系列文章 使用Docker 实现 MySQL 循环复制(一) 使用Docker 实现 MySQL 循环复制(二) 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…

Navicat安装

1.安装包下载。 2.双击exe文件,一直点下一步即可,可以修改安装位置 3.双击PatchNavicat.exe,在下方位置输入navicat的安装位置 4.提示成功