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

  📝个人主页:哈__

期待您的关注 

目录

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.mfbz.cn/a/758642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计者思维丨权限轴

应用背景 数据的本质是为了业务服务,从而达到更高效的工作方式,实现数据对业务的赋能和推动作用。 因此在构建报表时,需要开发者有设计思维,能够考虑多种应用场景,帮助业务解决实际应用中的问题。 例如,在实…

昇思MindSpore学习入门-函数式自动微分

函数式自动微分 神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度&#…

论文解读:【CVPR2024】DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码:GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable,,其下有两个子类:ja…

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法; ②掌握图像边缘提取的主要原理和方法; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。 ②调…

java基于ssm+jsp 多用户博客个人网站

1管理员功能模块 管理员登录,管理员通过输入用户名、密码等信息进行系统登录,如图1所示。 图1管理员登录界面图 管理员登录进入个人网站可以查看;个人中心、博文类型管理、学生博客管理、学生管理、论坛信息、管理员管理、我的收藏管理、留…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

微短剧市场还能火多久?短剧小程序是否有必要搭建?,现在入场到底晚不晚?

我公司在2019年开始都是做软件开发的,从2022到现在(2024)特别深有体会,在2022年的时候我公司还是在全部做外包项目,一年大概遇到了10多个咨询短剧领域的软件定制,但是当时我只是以为是一个影视播放的程序&a…

7.优化算法之分治-快排归并

0.分治 分而治之 1.颜色分类 75. 颜色分类 - 力扣(LeetCode) 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数…

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展,大型视觉语言模型(LVLMs)在多模态应用领域取得了显著进展。然而,现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白,本文介绍了MMT-Bench,这是一个全面的…

Django 模版继承

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

leetCode.93. 复原 IP 地址

leetCode.93. 复原 IP 地址 题目思路&#xff1a; 代码 // 前导零的判断方法&#xff1a;如果第一个数是0&#xff0c;且第二个数还有数据&#xff0c;那就是前导0&#xff0c;要排除的 // 注意跟单个 0 区分开 class Solution { public:vector<string> res;vector<…

Opencv+python模板匹配

我们经常玩匹配图像或者找相似&#xff0c;opencv可以很好实现这个简单的小功能。 模板是被查找目标的图像&#xff0c;查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法&#xff0c;其语法如下&#xff1a; result cv2.…

【活动感想】筑梦之旅·AI共创工坊 workshop 会议回顾

目录 &#x1f30a;1. 会议详情 &#x1f30a;2. 会议回顾 &#x1f30d;2.1 主持人开场 &#x1f30d;2.2 元甲-小当家 AI 驱动的创意儿童营养早餐料理机&今天吃什么App &#x1f30d;2.3 Steven- A l 心理疗愈认知 &#x1f30d;2.4 伯棠-诸子百家(xExperts)-多智能…

私有部署Twikoo评论系统

原文&#xff1a;https://blog.c12th.cn/archives/12.html 前言 以前用 MongoDB Vercel 搭建 Twikoo 老是有点小问题&#xff0c;所以就放弃了。无意中看到可以用 docker 来搭建&#xff0c;正好有台服务器可以尝试下。 私有部署 Twikoo 版本要求 1.6.0 或以上 &#xff0c; …

AMD Anti-Lag 2抗延迟技术落地 CS2首发、延迟缩短95%

AMD发布了全新重磅驱动程序Adrenalin 24.6.1版本&#xff0c;包括首发落地Anti-Lag 2抗延迟技术、优化支持新游戏、升级支持HYPR-Tune、支持新操作系统、优化AI加速与开发、扩展支持Agility SDK、修复已知Bug&#xff0c;等等。 一、Anti-Lag 2 今年5月份刚宣布&#xff0c;重…

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

信号与系统-实验6-离散时间系统的 Z 域分析

一、实验目的 1、掌握 z 变换及其性质&#xff1b;了解常用序列的 z 变换、逆 z 变换&#xff1b; 2、掌握利用 MATLAB 的符号运算实现 z 变换&#xff1b; 3、掌握利用 MATLAB 绘制离散系统零、极点图的方法&#xff1b; 4、掌握利用 MATLAB 分析离散系统零、极点的方法&a…

kicad第三方插件安装问题

在使用KICAD时想安装扩展内容&#xff0c;但是遇到下载失败&#xff0c;因为SSL connect error。 因为是公司网络&#xff0c;我也不是很懂&#xff0c;只能另寻他法。找到如下方法可以曲线救国。 第三方插件包目录 打开存放第三方插件存放目录&#xff0c;用于存放下载插件包…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口&#xff0c;让后端进行打包&#xff0c;后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件&#xff0c;首先修改后端接口。 //打…