【机器学习】Python中sklearn中数据基础处理与分析过程

news2024/11/25 19:20:46

  📝个人主页:哈__

期待您的关注 

目录

1. 简介

​编辑

1.1 什么是Scikit-learn

介绍Scikit-learn

应用领域

1.2 安装Scikit-learn

安装步骤

必要的依赖

2. 数据处理

2.1 创建示例数据

2.2 数据预处理

处理缺失值

特征编码

特征缩放

3. 数据集划分

3.1 划分数据集

4. 模型训练与评估

4.1 选择模型

4.2 训练和评估模型

逻辑回归

支持向量机

决策树

K近邻

5. 进阶内容

5.1 网格搜索与超参数调优

5.2 交叉验证


1. 简介

1.1 什么是Scikit-learn

介绍Scikit-learn

Scikit-learn(简称sklearn)是一个基于Python的机器学习库,构建在NumPy、SciPy和Matplotlib之上。它提供了简单而高效的工具来进行数据挖掘和数据分析,适用于各种机器学习任务。

主要特点:

  • 简单且高效:提供了大量的机器学习算法,具有一致的API接口,易于上手。
  • 广泛的算法覆盖:支持分类、回归、聚类、降维、模型选择和预处理等多种任务。
  • 高性能:借助于NumPy和SciPy的数值计算优势,保证了较高的计算效率。
  • 开源社区支持:拥有活跃的社区,提供了丰富的文档和示例代码。

应用领域

Scikit-learn在以下领域有广泛应用:

  • 分类:识别图片中的对象、垃圾邮件过滤、语音识别等。
  • 回归:预测房价、股票市场预测、气象预报等。
  • 聚类:客户细分、文档分类、图像分割等。
  • 降维:数据可视化、特征压缩、噪声过滤等。
  • 模型选择:通过交叉验证选择最佳模型和参数。

1.2 安装Scikit-learn

安装步骤

安装Scikit-learn非常简单,可以通过Python的包管理工具pip来完成。打开终端或命令提示符,运行以下命令:

pip install scikit-learn

如果你还没有安装pip,可以先安装pip:

# 对于Windows
python -m ensurepip --default-pip

# 对于macOS/Linux
python3 -m ensurepip --default-pip

必要的依赖

Scikit-learn依赖于以下Python库:

  • NumPy:支持高性能的数组运算。
  • SciPy:提供了许多用于科学计算的工具和算法。
  • joblib:用于在多个处理器上并行计算。
  • Matplotlib(可选):用于数据可视化。

在安装Scikit-learn时,这些依赖会自动安装。如果需要手动安装,可以运行以下命令:

pip install numpy scipy joblib matplotlib

2. 数据处理

在机器学习中,数据处理是至关重要的步骤之一。在本节中,我们将讨论如何导入、预处理数据,以确保数据质量和一致性,从而为机器学习模型的训练打下坚实基础。这里我们没有使用csv的方式,而是直接创建了数据。

2.1 创建示例数据

首先,我们将创建一个示例数据集,并使用Pandas库来管理数据。Pandas是一个强大的数据分析和处理工具,它提供了易用的数据结构和数据分析功能。

import pandas as pd
import numpy as np


data = {
    'age': [25, 30, 35, np.nan, 40, 22, 28, 45, 50, np.nan, 32, 38, 29, 27, np.nan, 26, 31, 34, 48, 37],
    'salary': [50000, 60000, 70000, 80000, np.nan, 45000, 58000, 65000, 72000, 68000, 75000, 64000, 52000, 50000, 60000, 55000, 61000, 67000, 73000, np.nan],
    'purchased': ['No', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No']
}

df = pd.DataFrame(data)
print("原始数据集:")
print(df.to_string(index=False))

上述代码创建了一个包含年龄(age)、薪资(salary)和是否购买(purchased)三列的示例数据集。此数据集中存在一些缺失值和分类数据。

2.2 数据预处理

处理缺失值

在数据分析和机器学习中,处理缺失值是常见的步骤。我们将使用Scikit-learn的SimpleImputer类来填补缺失值。这里我们选择使用均值来填补数值型特征的缺失值。

from sklearn.impute import SimpleImputer

# 创建一个SimpleImputer实例,用于填补缺失值
imputer = SimpleImputer(strategy='mean')

# 选择需要填补缺失值的列
columns_to_impute = ['age', 'salary']

# 填补缺失值
df[columns_to_impute] = imputer.fit_transform(df[columns_to_impute])

print("填补缺失值后的数据集:")
print(df)

在上述代码中,我们使用SimpleImputer将age和salary列中的缺失值填补为该列的均值。

特征编码

在机器学习模型中,我们通常需要将分类数据转换为数值数据。这里我们使用Scikit-learn的LabelEncoder来将purchased列中的分类数据(Yes和No)转换为数值数据(1和0)。

from sklearn.preprocessing import LabelEncoder

# 创建一个LabelEncoder实例
label_encoder = LabelEncoder()

# 将'Yes'/'No'转换为0和1
df['purchased'] = label_encoder.fit_transform(df['purchased'])

print("编码后的数据集:")
print(df)

特征缩放

特征缩放是数据预处理的重要步骤,尤其是在特征具有不同量纲时。我们使用Scikit-learn的StandardScaler来标准化age和salary列。

from sklearn.preprocessing import StandardScaler

# 创建一个StandardScaler实例
scaler = StandardScaler()

# 选择需要缩放的列
columns_to_scale = ['age', 'salary']

# 缩放特征
df[columns_to_scale] = scaler.fit_transform(df[columns_to_scale])

print("缩放后的数据集:")
print(df)

在上述代码中,我们使用StandardScaler将age和salary列标准化,使其均值为0,标准差为1,从而保证各特征在同一尺度上。

通过上述步骤,我们成功地创建并预处理了一个示例数据集。这些预处理步骤包括处理缺失值、编码分类数据和特征缩放,是机器学习项目中的重要环节,能够显著提高模型的性能和准确性。

3. 数据集划分

数据集划分是机器学习中至关重要的一步。通常,我们将数据集划分为训练集和测试集,用于模型的训练和评估。Scikit-learn提供了一个方便的函数train_test_split,可以轻松地将数据集按指定比例划分。

3.1 划分数据集

我们将使用Scikit-learn的train_test_split函数将数据集划分为训练集和测试集。通常,我们会选择70%-80%的数据用于训练,其余用于测试。

from sklearn.model_selection import train_test_split

X = df[['age', 'salary']]
y = df['purchased']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

print("训练集特征:")
print(X_train.to_string(index=False))
print("\n测试集特征:")
print(X_test.to_string(index=False))
print("\n训练集目标:")
print(y_train.to_string(index=False))
print("\n测试集目标:")
print(y_test.to_string(index=False))

在上述代码中,我们将数据集按70%用于训练,30%用于测试。训练集和测试集的划分使我们可以使用训练集来训练模型,并使用测试集来评估模型的性能,从而确保模型的泛化能力。

4. 模型训练与评估

4.1 选择模型

在本教程中,我们将使用几种常见的分类模型来进行分类任务。这些模型包括:

  • 逻辑回归(Logistic Regression)
  • 支持向量机(Support Vector Machine, SVM)
  • 决策树(Decision Tree)
  • 随机森林(Random Forest)
  • K近邻(K-Nearest Neighbors, KNN)

4.2 训练和评估模型

我们将分别训练和评估这些模型,展示每个模型的性能。

逻辑回归

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 创建逻辑回归模型
model_lr = LogisticRegression()

# 使用训练集训练模型
model_lr.fit(X_train, y_train)

# 预测测试集结果
y_pred_lr = model_lr.predict(X_test)

# 评估模型
accuracy_lr = accuracy_score(y_test, y_pred_lr)
conf_matrix_lr = confusion_matrix(y_test, y_pred_lr)
class_report_lr = classification_report(y_test, y_pred_lr)

print("逻辑回归模型评估:")
print(f"准确率:{accuracy_lr:.2f}")
print("混淆矩阵:")
print(conf_matrix_lr)
print("分类报告:")
print(class_report_lr)

支持向量机

from sklearn.svm import SVC

# 创建支持向量机模型
model_svc = SVC()

# 使用训练集训练模型
model_svc.fit(X_train, y_train)

# 预测测试集结果
y_pred_svc = model_svc.predict(X_test)

# 评估模型
accuracy_svc = accuracy_score(y_test, y_pred_svc)
conf_matrix_svc = confusion_matrix(y_test, y_pred_svc)
class_report_svc = classification_report(y_test, y_pred_svc)

print("支持向量机模型评估:")
print(f"准确率:{accuracy_svc:.2f}")
print("混淆矩阵:")
print(conf_matrix_svc)
print("分类报告:")
print(class_report_svc)

决策树

from sklearn.tree import DecisionTreeClassifier

# 创建决策树模型
model_dt = DecisionTreeClassifier()

# 使用训练集训练模型
model_dt.fit(X_train, y_train)

# 预测测试集结果
y_pred_dt = model_dt.predict(X_test)

# 评估模型
accuracy_dt = accuracy_score(y_test, y_pred_dt)
conf_matrix_dt = confusion_matrix(y_test, y_pred_dt)
class_report_dt = classification_report(y_test, y_pred_dt)

print("决策树模型评估:")
print(f"准确率:{accuracy_dt:.2f}")
print("混淆矩阵:")
print(conf_matrix_dt)
print("分类报告:")
print(class_report_dt)

K近邻

from sklearn.neighbors import KNeighborsClassifier

# 创建K近邻模型
model_knn = KNeighborsClassifier()

# 使用训练集训练模型
model_knn.fit(X_train, y_train)

# 预测测试集结果
y_pred_knn = model_knn.predict(X_test)

# 评估模型
accuracy_knn = accuracy_score(y_test, y_pred_knn)
conf_matrix_knn = confusion_matrix(y_test, y_pred_knn)
class_report_knn = classification_report(y_test, y_pred_knn)

print("K近邻模型评估:")
print(f"准确率:{accuracy_knn:.2f}")
print("混淆矩阵:")
print(conf_matrix_knn)
print("分类报告:")
print(class_report_knn)

通过这些示例,我们展示了如何使用不同的机器学习模型来解决分类问题,并评估每个模型的性能。这些模型在不同的应用场景下各有优势,选择适合的模型可以显著提升预测的准确性和可靠性。

5. 进阶内容

在机器学习中,优化模型的性能和可靠性是关键的一步。下面我们将介绍两种常用的进阶技术:网格搜索与超参数调优,以及交叉验证。

5.1 网格搜索与超参数调优

超参数调优是提高模型性能的一个重要步骤。超参数是模型训练前设定的参数,不能从数据中直接估计。Scikit-learn提供了GridSearchCV,一个强大的工具来进行超参数调优。

我们将以随机森林模型为例,展示如何使用网格搜索来优化超参数。

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

# 定义超参数网格
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# 创建随机森林模型
model_rf = RandomForestClassifier()

# 创建网格搜索对象
grid_search = GridSearchCV(estimator=model_rf, param_grid=param_grid, cv=5, scoring='accuracy', n_jobs=-1)

# 执行网格搜索
grid_search.fit(X_train, y_train)

# 获取最佳参数
best_params = grid_search.best_params_
best_score = grid_search.best_score_

print(f"最佳参数:{best_params}")
print(f"最佳交叉验证准确率:{best_score:.2f}")

在上面的代码中,我们定义了一个参数网格,包含了多个可能的参数组合。GridSearchCV将遍历这些组合,使用交叉验证来评估每个组合的性能,并返回最佳的参数组合。

5.2 交叉验证

交叉验证是一种评估模型性能的技术,通过将数据集分成多个子集,分别用于训练和测试。常用的交叉验证方法是k折交叉验证(k-fold cross-validation),其中数据集被分成k个子集,每个子集轮流作为测试集,其余子集用于训练。

我们可以使用Scikit-learn的cross_val_score函数来进行k折交叉验证。

from sklearn.model_selection import cross_val_score

# 创建随机森林模型
model_rf = RandomForestClassifier(n_estimators=100, max_depth=20, min_samples_split=2, min_samples_leaf=1)

# 进行5折交叉验证
cv_scores = cross_val_score(model_rf, X, y, cv=5, scoring='accuracy')

print(f"交叉验证准确率:{cv_scores}")
print(f"平均交叉验证准确率:{cv_scores.mean():.2f}")

在上述代码中,我们使用5折交叉验证来评估随机森林模型的性能。cross_val_score函数返回每折交叉验证的准确率,我们还计算了平均交叉验证准确率。

通过这些进阶技术,我们可以更好地优化和评估模型,从而提高模型的泛化能力和预测性能。这些步骤在实际机器学习项目中非常重要,可以显著提升最终模型的效果。

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

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

相关文章

kali/ubuntu安装vulhub

无须更换源,安装docker-compose apt install docker.io docker -vdocker-compose #提示没有,输入y安装mkdir -p /etc/docker vi /etc/docker/daemon.json #更换dockerhub国内源┌──(root㉿kali)-[/home/kali/vulhub-master/tomcat/CVE-2017-12615] …

Java对象创建过程

在日常开发中,我们常常需要创建对象,那么通过new关键字创建对象的执行中涉及到哪些流程呢?本文主要围绕这个问题来展开。 类的加载 创建对象时我们常常使用new关键字。如下 ObjectA o new ObjectA();对虚拟机来讲首先需要判断ObjectA类的…

测评推荐:企业管理u盘的软件有哪些?

U盘作为一种便携的存储设备,方便易用,被广泛应用于企业办公、个人学习及日常工作中。然而,U盘的使用也带来了数据泄露、病毒传播等安全隐患。为了解决这些问题,企业管理U盘的软件应运而生。 本文将对市面上流行的几款U盘管理软件…

大模型RAG问答中的文档分段

昨天,我们谈了句子分段,我们再来回顾一下段落的分段方法,目前已经有其他方案,图来自于:https://www.rungalileo.io/blog/mastering-rag-advanced-chunking-techniques-for-llm-applications,可以看到其中的…

Java17-时间类、包装类

目录 Date类 概述 常用方法 SimpleDateFormat类 概述 构造方法 格式规则 常用方法 Calendar类 概述 常用方法 get方法示例 set方法示例 add方法示例 JDK8时间相关类 ZoneId 时区 Instant 时间戳 ZoneDateTime 带时区的时间 DateTimeFormatter 用于时间的格式…

【Lua】第一篇:在Linux系统中安装搭建lua5.4.1环境

文章目录 一. 远程下载安装包二. 解压安装包三. 编译安装Lua环境 一. 远程下载安装包 输入以下命令即可在当前目录下,远程下载安装包lua-5.4.1.tar.gz: wget http://www.lua.org/ftp/lua-5.4.1.tar.gzPS:其他版本的安装包如下,可…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

教师资格证(教资)笔试如何备考?含备考资料

教师资格证&#xff08;教资&#xff09;笔试如何备考&#xff1f;含备考资料 前言 教师&#xff0c;一直以来的热门职业&#xff0c;而要成为一名教师&#xff0c;考取教师资格证则是基本条件&#xff0c;那么教资笔试如何备考呢&#xff1f;&#xff0c;这里准备笔试备考攻…

南方空调企业疑似暗讽对手用铝代铜,偷工减料,空调不耐用

空调行业卷到何种程度了&#xff1f;已经开始偷工减料了&#xff0c;日前南方一家空调企业的老板就公开指出一些企业用铝管替代铜管&#xff0c;如此做后果将是导致空调的耐久性和稳定性不足&#xff0c;其实还有散热效果不好&#xff0c;导致耗电量、制冷效果下降。 今年空调的…

Spring-循环依赖是如何解决的

1、bean被创建保存到spring容器的过程 1、实例化 -> 获取对象&#xff1b; 2、填充属性&#xff1b;这里可能需要依赖其它的bean。 3、AOP代理对象替换&#xff1b; 4、加入单例池&#xff1b; 问题&#xff1a; 循环依赖怎么处理 ServiceA 中有属性ServiceB b&#…

记一次小程序渗透

这次的小程序渗透刚好每一个漏洞都相当经典所以记录一下。 目录 前言 漏洞详情 未授权访问漏洞/ 敏感信息泄露&#xff08;高危&#xff09; 水平越权&#xff08;高危&#xff09; 会话重用&#xff08;高危&#xff09; 硬编码加密密钥泄露&#xff08;中危&#xff0…

FFmpeg 命令行 音视频格式转换

&#x1f4da;&#xff1a;FFmpeg 提供了丰富的命令行选项和功能&#xff0c;可以用来处理音视频文件、流媒体等&#xff0c;掌握命令行的使用&#xff0c;可以有效提高工作效率。 目录 一、视频转换和格式转换 &#x1f535; 将视频文件转换为另一种格式 &#x1f535; 指定…

代码随想录--字符串--替换数字

题目 给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#xff0c;而将每个数字字符替换为number。 例如&#xff0c;对于输入字符串 “a1b2c3”&#xff0c;函数应该将其转换为 “anumberbnumber…

cesium使用cesium-navigation-es6插件创建指南针比例尺

cesium-navigation-es6 是一个为 Cesium.js 提供导航控件的库&#xff0c;它提供了一些常见的用户界面组件&#xff0c;用于在 Cesium 场景中实现用户导航和交互。下面将介绍如何在项目中使用 cesium-navigation-es6。 使用步骤 1. 安装 cesium-navigation-es6 首先&#xf…

flex讲解

随着前端技术的不断发展和更新&#xff0c;flex布局成为前端布局的主流。但是仍然有很多前端新手搞不懂flex到底怎么用&#xff01;&#xff01;&#xff01;今天我们就来好好讲讲flex布局 老规矩先上定义 什么是flex布局 布局的传统解决方案&#xff0c;基于盒状模型&#x…

K8S 集群节点扩容

环境说明&#xff1a; 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233&#xff08;需上线&#xff09;192.168.99.2332C4Gwoker1.23.1720.10.24 当现有集群中的节点资源不够用&…

kinect2.0问题:四、DiscreteGestureBasics-WPF更换自己的gbd文件后报错

1、报错状况 “System.InvalidOperationException”类型的异常在 Microsoft.Kinect.VisualGestureBuilder.dll 中发生&#xff0c;但未在用户代码中进行处理其他信息: This API has returned an exception from an HRESULT: 0x800040052、解决方案 原设置 改成下图就不报错了…

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面&#xff1a; 1.系统监控&#xff1a; 实时监测信息系统的运行状态&#xff0c;如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具&#xff0c;及时发现系统…

1966 ssm 流浪猫领养网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 流浪猫领养网站系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

产品经理系列1—如何实现一个电商系统

具体笔记如下&#xff0c;主要按获客—找货—下单—售后四个部分进行模块拆解