【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://xiahunao.cn/news/3246217.html

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

相关文章

路由上传一个ui_control参数(uint32类型)控制页面UI显隐

前言:传一个uint32类型的值,通过 按位或操作符(|)来设置ui_control的值,通过按位与操作符(&)来检测是否显示或隐藏 简单介绍一下两个概念: 按位与操作符和按位或操作符都是二进…

【漏洞复现】泛微E-Cology WorkflowServiceXml SQL注入漏洞

0x01 产品简介 泛微e-cology是一款由泛微网络科技开发的协同管理平台,支持人力资源、财务、行政等多功能管理和移动办公。 0x02 漏洞概述 泛微OAE-Cology 接口/services/WorkflowServiceXml 存在SQL注入漏洞,可获取数据库权限,导致数据泄露…

移动端APP 如何进行自动化和探索性测试?

在测试设计时最主要依据的就是测试金字塔的测试结构。如果在项目临近发布才开始测试并发现缺陷,这样修复缺陷的成本就会很高,项目的进度也会很不确定。所以,就开发阶段来说,如果把测试分层,在不同的开发阶段都进行测试…

IIS短文件名称POC检测

使用方法 安装python环境 执行此文件 python [命名].py -u http://baidu.com #!/usr/bin/env python # -*- encoding: utf-8 -*- """ File : IIS-ShortName-PoC.py tell : 用于安全人员检测系统是否存在该漏洞,切勿用于非法用途 "…

分类预测 | Matlab实现OOA-LSSVM鱼鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断

分类预测 | Matlab实现OOA-LSSVM鱼鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断 目录 分类预测 | Matlab实现OOA-LSSVM鱼鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断分类效果基本介绍程序设计参考资料 分类效果 基本介绍 分类预测 | Matlab实现OOA-LSSVM鱼…

生物化学基础1 : 蛋白质

生物化学基础1 : 蛋白质 /***************************************************/ /***************************************************/ /***************************************************/ /***************************************************/ /**************…

background-image: linear-gradient 属性hover动画

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

中霖教育:2024年注册会计师考试

2024年注册会计师考试报名时间已经将于四月份结束&#xff0c;还未开始考试&#xff0c;没有报名的考生可以准备明年的考试。 报名时间&#xff1a;4月8日-4月30日 考试时间&#xff1a;8月23日-8月25日 报名条件&#xff1a;具有专科以上学历&#xff0c;或者具有会计或者相…

docker的/var/run/docker.sock参数 作用是什么

-v /var/run/docker.sock:/var/run/docker.sock 的作用是什么 在工作中常见的容器 都要加上这个参数 -v /var/run/docker.sock:/var/run/docker.sock 其实这是容器跟docker 进程之间通信用的。 如果你的容器需要操作 docker 的资源&#xff0c;那么这个参数必须要有的。 /va…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥导出(ArkTS)】

密钥导出(ArkTS) 业务需要获取持久化存储的非对称密钥的公钥时使用&#xff0c;当前支持ECC/RSA/ED25519/X25519的公钥导出。 开发步骤 指定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节。调用接口[exportKeyItem]&#xff0c;传入参数keyAlias和options。 option…

使用ChatGPT完成论文写作全流程提示词分享!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 &#xff0c;直接上干货&#xff1a; 1. 文献综述 1.1. 主题聚焦&#xff1a;“我正在写关于[主题]的文献综述&#xff0c;请帮我找到相关的研究。” 1.2. 研究趋势&#xff1a;“请分…

leetcode94. 二叉树的中序遍历,递归法+迭代法。附带前序遍历方法

leetcode94. 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; …

OpenMv画面畸变

OpenMv画面畸变 在OpenMV中&#xff0c;img.lens_corr函数用于进行镜头畸变校正。镜头畸变是指在图像捕捉过程中&#xff0c;由于镜头本身的光学特性&#xff0c;会使得图像出现变形。 img.lens_corr函数可以对这些畸变进行校正&#xff0c;使图像恢复到较为自然的状态。该函数…

c++入门----类与对象(上)

大家好啊&#xff0c;好久没有更新了。因为本人的愚笨&#xff0c;想与大家分享的话肯定还得自己明白了才能给大家分享吧。所以这几天都在内部消化。好给大家优质的文章。当然我写的肯定还是很有问题的&#xff0c;希望大家可以在评论区里面指出来。好&#xff0c;废话不多说&a…

揭秘物联网“心脏“:智能控制器的无限可能

在飞速发展的物联网时代&#xff0c;我们身边的智能设备越来越多&#xff0c;从智能家居到工业自动化&#xff0c;从智能交通到智慧城市&#xff0c;这些设备的背后&#xff0c;都离不开一个至关重要的“心脏”——物联网智能控制器。那么&#xff0c;这个神秘的控制器究竟有何…

django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出

使用crontab执行python脚本时&#xff0c;有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说&#xff0c;crontab使用的环境变量是非交互式(non-interactive)环境变量&#xff0c;而终端则使用交互式(inter…

Unresolved reference: button2

书籍 《第一行代码 Android》第三版 开发环境 Android Studio Jellyfish | 2023.3.1 问题 在学习《第一行代码 Android》第三版的3.3.5 返回数据给上一个Activity章节时, 在SecondActivity中给按钮注册点击事件时出现问题"Unresolved reference: button2",如下图…

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测

1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…

【SpringBoot配置文件application.yaml】笔记

详细内容见官方文档Common Application Properties 使用application.yaml进行简单配置 第一步&#xff1a;创建WebDemo第二步&#xff1a;创建application.yaml配置文件注意&#xff1a; 第三步&#xff1a;验证自己创建的yaml文件是否生效测试&#xff1a;思考&#xff1a;如…

【STM32嵌入式系统设计与开发---拓展】——1_9_1上拉输入和下拉输入

在使用GPIO引脚时&#xff0c;上拉输入和下拉输入的选择取决于外部电路的特性和应用需求。以下是它们各自的应用场景&#xff1a; 1、上拉输入&#xff08;Pull-up Input&#xff09; 用途: 当默认状态需要为高电平时。 避免引脚悬空&#xff08;floating&#xff09;导致的…