NumPy:数值计算的基石

NumPy是Python中用于科学计算的核心库,它提供了一个强大的N维数组对象,以及大量的数学函数库,能够高效地进行向量和矩阵运算。对于数据科学家而言,掌握NumPy是进行数据处理和算法实现的基础。

创建与操作数组

在NumPy中,ndarray(N-dimensional array)是其核心数据结构。通过它可以方便地创建多维数组,并进行各种数学运算。例如,创建一个一维数组并执行基本运算:

import numpy as np# 创建一个一维数组
a = np.array([1, 2, 3, 4])# 数组加法
b = a + 1  # 结果: [2, 3, 4, 5]# 数组乘法
c = a * 2  # 结果: [2, 4, 6, 8]
高级索引与切片

NumPy支持多种索引方式,包括布尔索引和整数索引,这使得数据筛选和修改变得非常灵活。例如,使用布尔索引选取大于2的元素:

# 使用布尔索引选取大于2的元素
filtered_a = a[a > 2]  # 结果: [3, 4]
通用函数(ufunc)

NumPy的通用函数能够对数组中的每个元素执行快速操作,如平方根、对数等。这些函数通常是矢量化的,意味着它们可以同时作用于整个数组,而无需显式的循环。例如,计算数组中每个元素的平方根:

# 计算平方根
sqrt_a = np.sqrt(a)  # 结果: [1.         1.41421356 1.73205081 2.        ]

Pandas:数据分析的强大工具

Pandas是建立在NumPy之上的一个库,专为数据预处理、清洗、分析和可视化设计。它引入了两种主要的数据结构:Series(一维)和DataFrame(二维),极大地提高了数据处理的效率和便捷性。

数据加载与初步处理

Pandas支持从多种数据源加载数据,包括CSV、Excel、SQL数据库等。加载数据后,通常需要进行一些初步的清洗工作,如处理缺失值、转换数据类型等。例如,从CSV文件加载数据并查看前几行:

import pandas as pd# 从CSV文件加载数据
df = pd.read_csv('data.csv')# 查看前五行
print(df.head())
数据选择与过滤

Pandas提供了丰富的数据选择机制,允许用户基于标签、位置或条件表达式来选取数据。例如,选择特定列的数据:

# 选择'age'和'salary'两列
subset = df[['age', 'salary']]

或者根据条件过滤行:

# 过滤年龄大于30的数据
filtered_df = df[df['age'] > 30]
数据聚合与分组

Pandas的groupby功能是进行数据聚合和分组操作的强大工具。通过groupby,可以轻松计算各组的统计量,如均值、总和等。例如,按部门计算平均薪资:

# 按'department'分组并计算平均薪资
avg_salary = df.groupby('department')['salary'].mean()

Scikit-learn:机器学习的瑞士军刀

Scikit-learn是一个简单高效的Python机器学习库,它建立在NumPy、Pandas和Matplotlib之上,为数据科学家和机器学习从业者提供了丰富的算法实现和工具。无论是分类、回归、聚类还是降维,Scikit-learn都提供了简洁易用的接口。

数据集的准备与划分

在使用Scikit-learn进行模型训练之前,通常需要将数据集分为训练集和测试集,以评估模型的性能。Scikit-learn提供了train_test_split函数来简化这一过程。例如,将数据集按80%训练,20%测试的比例划分:

from sklearn.model_selection import train_test_split# 假设X为特征,y为目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
模型训练与预测

Scikit-learn拥有众多预定义的模型,如线性回归、逻辑回归、支持向量机等。以下是一个使用逻辑回归进行二分类的示例:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 初始化模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 进行预测
y_pred = model.predict(X_test)# 评估模型准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
超参数调优与交叉验证

为了找到模型的最佳参数,Scikit-learn提供了网格搜索(GridSearchCV)和随机搜索(RandomizedSearchCV)等工具。这些工具通过交叉验证的方式评估不同参数组合的效果,从而选择出最优的参数配置。例如,使用网格搜索寻找最佳参数:

from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'C': [0.1, 1, 10], 'penalty': ['l1', 'l2']}# 初始化GridSearchCV
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)# 执行搜索
grid_search.fit(X_train, y_train)# 输出最佳参数
print(f"Best parameters: {grid_search.best_params_}")

实战案例:从数据到模型的完整流程

为了更好地理解上述工具链的应用,下面通过一个具体的案例来展示如何从原始数据出发,经过处理、分析,最终构建并评估一个机器学习模型。

数据加载与清洗

假设有一个关于员工信息的CSV文件,包含员工的年龄、部门、薪资等信息。需要加载数据并进行初步的清洗工作。

import pandas as pd# 加载数据
df = pd.read_csv('employees.csv')# 查看缺失值情况
print(df.isnull().sum())# 填充缺失值(例如,用中位数填充薪资的缺失值)
df['salary'].fillna(df['salary'].median(), inplace=True)
特征工程与数据准备

接下来,需要对数据进行特征工程,包括转换分类变量为数值型、标准化特征等,以便模型能够处理。

from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer# 定义预处理步骤:对'department'进行独热编码,对'age'和'salary'进行标准化
preprocessor = ColumnTransformer(transformers=[('dept', OneHotEncoder(), ['department']),('num', StandardScaler(), ['age', 'salary'])])# 应用预处理步骤
X = preprocessor.fit_transform(df)
y = df['left']  # 假设目标变量是员工是否离职(二分类问题)
模型训练与评估

现在,可以使用Scikit-learn中的模型进行训练和评估。这里,选择逻辑回归作为示例模型。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import confusion_matrix, classification_report# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = model.predict(X_test)# 评估模型性能
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
print("Classification Report:")
print(classification_report(y_test, y_pred))
超参数调优与模型优化

为了进一步提高模型的性能,可以使用网格搜索来调整模型的超参数。

from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'C': [0.01, 0.1, 1, 10, 100], 'penalty': ['l1', 'l2'], 'solver': ['liblinear']}# 初始化GridSearchCV
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, scoring='accuracy')# 执行搜索
grid_search.fit(X_train, y_train)# 输出最佳参数和最佳得分
print(f"Best parameters: {grid_search.best_params_}")
print(f"Best cross-validation score: {grid_search.best_score_}")

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

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

相关文章

八股学习(三)---MySQL

一、MySQL中的回表是什么?我的回答:MySQL回表指的是在查询使用非聚簇索引也就是二级索引时,叶子节点只存储了索引列的值和主键Id,若要查询其他字段,就要根据主键去聚簇索引查询完整的数据。这个过程就是回表。比如用na…

NeighborGeo:基于邻居的IP地理定位(一)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, Abstract IP地址定位在网络安全、电子商务、社交媒体等领域至关重要。当前主流的图神经网络方法…

MySQL 8.0:窗口函数

一、基础知识 定义 窗口函数(Window Function)对查询结果集的子集(“窗口”)进行计算,保留原始行而非聚合为单行,适合复杂分析(如排名、累积和)。 基本语法: 函数名() OV…

AI 深度学习面试题学习

1.神经网络 1.1各个激活函数的优缺点? 1.2为什么ReLU常用于神经网络的激活函数? 1.在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小; 2.避免梯度消失问题。对于深层网络,Sigmoid函数反向传播时,很容易就会出现梯度消失问题(在Sigmoid接近饱和区时,变换…

遇到该问题:kex_exchange_identification: read: Connection reset`的解决办法

kex_exchange_identification: read: Connection reset 是一个非常常见的 SSH 连接错误。它表明在 SSH 客户端和服务器建立安全连接的初始阶段(密钥交换,Key Exchange),连接就被对方(服务器)强制关闭了。 …

(论文蒸馏)语言模型中的多模态思维链推理

(论文总结)语言模型中的多模态思维链推理 论文名称研究背景动机主要贡献研究细节两阶段框架实验结果促进收敛性摆脱人工标注错误分析与未来前景 论文名称 Multimodal Chain-of-Thought Reasoning in Language Models http://arxiv.org/abs/2302.00923 …

React Native 接入 eCharts

React Native 图表接入指南 概述 本文档详细介绍了在React Native项目中接入ECharts图表的完整步骤,包括依赖安装、组件配置、数据获取、图表渲染等各个环节。 目录 1. 环境准备2. 依赖安装3. 图表组件创建4. 数据获取Hook5. 图表配置6. 组件集成7. 国际化支持8…

基于C#的OPCServer应用开发,引用WtOPCSvr.dll

操作流程: 1.引入WtOPCSvr.dll文件 2.注册服务:使用UpdateRegistry方法注册,注意关闭应用时使用UnregisterServer取消注册。 3.初始化服务:使用InitWTOPCsvr初始化 4.使用CreateTag方法,创建标签 5.读写参数使用下面三…

Java类加载器getResource行为简单分析

今天尝试集成一个第三方SDK,在IDE里运行正常,放到服务器上却遇到了NPE,反编译一看,原来在这一行:String path Test.class.getClassLoader().getResource("").getPath(); // Test.class.getClassLoader().ge…

【CodeTop】每日练习 2025.7.4

Leetcode 1143. 最长公共子序列 动态规划解决,比较当前位置目标和实际字符串的字母,再根据不同情况计算接下来的情形。 class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] t1 text1.toCharArray();char[] t2…

ES6从入门到精通:Promise与异步

Promise 基础概念Promise 是 JavaScript 中处理异步操作的一种对象,代表一个异步操作的最终完成或失败及其结果值。它有三种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败&#xf…

数据结构:二维数组(2D Arrays)

目录 什么是二维数组? 二维数组的声明方式 方式 1:静态二维数组 方式 2:数组指针数组(数组中存放的是指针) 方式 3:双指针 二级堆分配 💡 补充建议 如何用“第一性原理”去推导出 C 中…

HAProxy 和 Nginx的区别

HAProxy 和 Nginx 都是优秀的负载均衡工具,但它们在设计目标、适用场景和功能特性上有显著区别。以下是两者的详细对比:1. 核心定位特性HAProxyNginx主要角色专业的负载均衡器/代理Web 服务器 反向代理/负载均衡设计初衷高性能流量分发高并发 HTTP 服务…

基于Java+SpringBoot的健身房管理系统

源码编号:S586源码名称:基于SpringBoot的健身房管理系统用户类型:多角色,用户、教练、管理员数据库表数量:13 张表主要技术:Java、Vue、ElementUl 、SpringBoot、Maven运行环境:Windows/Mac、JD…

【MySQL安装-yum/手动安装,卸载,问题排查处理完整文档(linux)】

一.使用Yum仓库自动安装 步骤1:添加MySQL Yum仓库 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm步骤2:安装MySQL服务器 sudo yum install mysql-server -y步骤3:启动并设置开机自启 sudo systemctl start mysqld sudo systemct…

自定义线程池-实现任务0丢失的处理策略

设计一个线程池,要求如下:队列最大容量为10(内存队列)。当队列满了之后,拒绝策略将新的任务写入数据库。从队列中取任务时,若该队列为空,能够从数据库中加载之前被拒绝的任务模拟数据库 (TaskDa…

【NLP入门系列四】评论文本分类入门案例

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

Ubuntu安装ClickHouse

注:本文章的ubuntu的版本为:ubuntu-20.04.6-live-server-amd64。 Ubuntu(在线版) 更新软件源 sudo apt-get update 安装apt-transport-https 允许apt工具通过https协议下载软件包。 sudo apt-get install apt-transport-htt…

C++26 下一代C++标准

C++26 将是继 C++23 之后的下一个 C++ 标准。这个新标准对 C++ 进行了重大改进,很可能像 C++98、C++11 或 C++20 那样具有划时代的意义。 一:C++标准回顾 C++ 已经有 40 多年的历史了。过去这些年里发生了什么?这里给出一个简化版的答案,直到即将到来的 C++26。 1. C++9…

【MySQL】十六,MySQL窗口函数

在 MySQL 8.0 及以后版本中,窗口函数(Window Functions)为数据分析和处理提供了强大的工具。窗口函数允许在查询结果集上执行计算,而不必使用子查询或连接,这使得某些类型的计算更加高效和简洁。 语法结构 function_…