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

news2024/11/13 10:23:05

在这里插入图片描述

引言

在数据科学和机器学习领域,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_split

X_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 DecisionTreeClassifier

clf = DecisionTreeClassifier(random_state=42)

5.5. 模型训练

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

clf.fit(X_train, y_train)

5.6. 模型评估

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

from sklearn.metrics import classification_report, accuracy_score

y_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_names

print("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 plt

plt.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_names

print("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 pd

boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target

print(df.head())
print(df.describe())

6.2 数据预处理

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

# 检查缺失值
print(df.isnull().sum())

# 标准化特征
from sklearn.preprocessing import StandardScaler

scaler = 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_split

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)

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 plt

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()

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.coloradmin.cn/o/1935083.html

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

相关文章

【electron】 快速启动electron 应用

学无止境: 最近在搞electron项目,最重要的是总结 ,写下来总不会忘记,也希望给大家参考一下,有不对的地方希望大家多指点。 快速启动electron 应用 1 克隆示例项目的仓库 git clone https://github.com/electron/ele…

如何用手机压缩视频?手机压缩视频方法来了

高清视频的大文件大小常常成为分享和存储的障碍,尤其是在数据流量有限或存储空间紧张的情况下。幸运的是,无论是智能手机还是个人电脑,都有多种方法可以帮助我们轻松压缩视频文件,以适应不同的需求和情境。本文将介绍如何在手机上…

【Apache Doris】周FAQ集锦:第 16 期

【Apache Doris】周FAQ集锦:第 16 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户…

BI如何实现制造业精益生产可视化管理?

当前,制造业正快速向智能化和数字化转型。企业通过引入物联网、大数据、云计算和人工智能等技术,显著提升了生产过程的自动化和智能化水平。同时,工业4.0理念的普及,使得智能工厂和智能物流逐渐成为主流,帮助企业实现更…

C语言 | Leetcode C语言题解之第258题各位相加

题目: 题解: int addDigits(int num){while (num > 10) {int sum 0;while (num > 0) {sum num % 10;num / 10;}num sum;}return num; }

【人工智能大模型】文心一言介绍以及基本使用指令

目录 一、产品背景与技术基础 二、主要功能与特点 基本用法 指令的使用 注意事项 文心一言(ERNIE Bot)是百度基于其文心大模型技术推出的生成式AI产品。以下是对文心一言的详细介绍: 一、产品背景与技术基础 技术背景:百度…

LabVIEW和Alicat Scientific质量流量计实现精确流量控制

在现代工业自动化和科研实验中,精确的气体流量控制至关重要。这里将介绍一个使用LabVIEW与Alicat Scientific公司的质量流量计实现流量控制的项目。项目采用Alicat Scientific的质量流量计(型号:M-200SCCM-D),通过LabV…

Python | Leetcode Python题解之第257题二叉树的所有路径

题目: 题解: class Solution:def binaryTreePaths(self, root: TreeNode) -> List[str]:paths list()if not root:return pathsnode_queue collections.deque([root])path_queue collections.deque([str(root.val)])while node_queue:node node_…

9.11和9.9哪个大?GPT-4o也翻车了

今天刷到了这个问题,心血来潮去问下chatgpt-4o,没想到疯狂翻车... 第一次问: GPT一开始给出了难绷的解答,让我想起了某短视频软件评论区里对某歌手节目排名的质疑哈哈哈哈哈 但是在接下来的进一步询问和回答中它反应过来了。 第…

功能测试与APPSCAN自动化测试结合的提高效率测试策略

背景 手工探索性测试(Manual Exploratory Testing,简称MET)是一种软件测试方法,它依赖于测试人员的直觉、经验和即兴发挥来探索应用程序或系统。与传统的脚本化测试相比,手工探索性测试不遵循固定的测试脚本&#xff0…

【总结】nginx源码编译安装报错./configure: error: SSL modules require the OpenSSL library.

问题现象 源码编译安装nginx时,执行./configure …… --with-http_ssl_module 命令安装https模块,需要用到openssl,由于机器缺少openssl库,报如下错误。 …… checking for openat(), fstatat() ... found checking for getaddr…

VS code配置docker远程连接

一 前置条件 1、本地已安装docker 2、服务端docker已配置Docker配置远程连接 二 VScode安装docker扩展 三 执行docker命令 1、切换到远程docker节点 docker context create remote-docker --docker "hosthttp://192.168.6.9:2375" 2、使用远程节点 docker cont…

PyTorch 深度学习实践-循环神经网络(高级篇)

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限,重看几遍吧,第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…,一个名字是一个序列 rnn用GRU 用ASCII表作为词典,长度为128&#x…

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统-解读

系统架构设计师教程 第3章 信息系统基础知识-3.5 专家系统(ES) 3.5.1 人工智能3.5.1.1 人工智能的特点3.5.1.2 人工智能的主要分支3.5.2 ES的概念3.5.2.1 ES 概述3.5.2.2 与传统程序的区别3.5.3 ES的特点3.5.4 ES的组成3.5.4.1 知识库3.5.4.2 综合数据库3.5.4.3 推理机3.5.4.…

【干货】光学检测技术及应用

光学检测技术涵盖了多种方法和应用,主要可以分为以下几类: 光学测量 结合光电技术与机械测量的高科技方法,利用计算机技术实现快速准确的测量,广泛应用于现代工业检测,如检测产品的形位公差和数值孔径等。 光学分析方…

腾讯元宝上线“3D角色梦工厂”:快速生成专属3D角色!

7月16日,腾讯旗下大模型应用“腾讯元宝”上线“3D角色梦工厂”,允许用户通过上传一张五官清晰的正面头像,并选择不同的角色模板,迅速生成个人3D角色! 技术特点 “3D角色梦工厂”将大模型生成技术与3D应用相结合&#…

LeetCode 394, 61, 100

目录 394. 字符串解码题目链接标签思路代码 61. 旋转链表题目链接标签思路代码 100. 相同的树题目链接标签思路代码递归版前序遍历层序遍历 394. 字符串解码 题目链接 394. 字符串解码 标签 栈 递归 字符串 思路 本题可以使用两个栈来解决,一个栈 timesStack …

嵌入式物联网在医疗行业中的应用——案例分析

作者主页: 知孤云出岫 目录 嵌入式物联网在医疗行业中的应用——案例分析引言1. 智能病房监控1.1 实时患者监控系统 2. 智能医疗设备管理2.1 设备使用跟踪与维护 3. 智能药物管理3.1 药物分配与跟踪 4. 智能远程医疗4.1 远程患者监控与诊断 总结 嵌入式物联网在医疗行业中的应…

3、宠物商店智能合约实战(truffle智能合约项目实战)

3、宠物商店智能合约实战(truffle智能合约项目实战) 1-宠物商店环境搭建、运行2-webjs与宠物逻辑实现3-领养智能合约初始化4-宠物领养实现5-更新宠物领养状态 1-宠物商店环境搭建、运行 https://www.trufflesuite.com/boxes/pet-shop 这个还是不行 或者…

Blender4.2版本正式上线,新版本的5个主要功能!

​Blender刚刚推出了备受瞩目的 Blender 4.2 版本,这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新,Blender 4.2 不仅稳定可靠,还引入了备受期待的“Eevee Next”实时渲染引…