当前位置: 首页 > news >正文

机器学习pytorch实践1

目录

  • Pandas
    • 基本数据结构
    • CSV
      • 方法
    • 数据清洗
  • Pytorch学习
    • 两大法宝
    • Python类
      • self
      • 常用的内置方法
    • Tensor 张量
    • TensorBoard 可视化
    • Transform
    • Normalize 归一化
    • nn.Module
    • 卷积神经网络
      • 卷积层
      • 池化层
  • 泰坦尼克号预测
    • 数据处理
    • 创建模型
    • 预测

Pandas

基本数据结构

  1. Series 一维
  2. DataFrame 二维

df [行] [列]

  • df [0] [‘name’]

  • df [df[‘name’]==‘LiHua’]

CSV

read_csv()

方法

head 头几条信息

info 信息

shape 尺寸

loc 可以使用标签查询

iloc index查询

reviews.iloc[-5:]
#倒数五行的数据

isnull

any

all

drop删除行或列,不会改变原始变量,如要改变原始原始变量,添加inplace=True参数

dropna删除缺失值,不会改变原始变量

mean平均值

map函数

X_test['Sex'] = X_test['Sex'].map({'male': 0, 'female': 1}) 

astype

在这里插入图片描述

数据清洗

#手动定义一个person数据
df = pd.DataFrame(person)
df.loc[2, 'age'] = 30 # 修改数据 age列的第三行
  1. 读取和写入数据
    • pd.read_csv(): 从CSV文件中读取数据。
    • pd.read_excel(): 从Excel文件中读取数据。
    • pd.read_sql(): 从SQL数据库中读取数据。
    • DataFrame.to_csv(): 将数据写入CSV文件。
    • DataFrame.to_excel(): 将数据写入Excel文件。
    • DataFrame.to_sql(): 将数据写入SQL数据库。
  2. 数据处理
    • DataFrame.head(), DataFrame.tail(): 显示DataFrame的前几行或后几行。
    • DataFrame.info(): 显示DataFrame的基本信息,包括每列的数据类型和非空值数量。
    • DataFrame.describe(): 提供DataFrame中数值列的统计摘要。
    • DataFrame.shape: 返回DataFrame的形状(行数,列数)。
    • DataFrame.columns: 返回DataFrame的列标签。
    • DataFrame.index: 返回DataFrame的行标签。
    • DataFrame.drop(): 删除行或列。
    • DataFrame.rename(): 重命名行或列。
    • DataFrame.groupby(): 根据指定的列对数据进行分组。
    • DataFrame.merge(): 合并两个DataFrame。
    • DataFrame.concat(): 沿指定轴连接两个或多个DataFrame。
  3. 数据选择和过滤
    • DataFrame[column_name]DataFrame.column_name: 选择单列数据。
    • DataFrame[[column1, column2]]: 选择多列数据。
    • DataFrame.iloc[]: 通过整数位置选择行和列。
    • DataFrame.loc[]: 通过标签选择行和列。
    • DataFrame.query(): 使用表达式选择数据。
    • DataFrame.filter(): 根据条件过滤数据。
  4. 数据操作
    • DataFrame.apply(): 应用函数到DataFrame的行或列。
    • DataFrame.applymap(): 应用函数到DataFrame的每个元素。
    • DataFrame.map(): 将函数应用到Series的每个元素。
    • DataFrame.sort_values(): 按值排序。
    • DataFrame.sort_index(): 按索引排序。
  5. 缺失值处理
    • DataFrame.dropna(): 删除包含缺失值的行或列。
    • DataFrame.fillna(): 用指定值填充缺失值。
    • DataFrame.interpolate(): 对缺失值进行插值。
  6. 其他
    • pd.concat(): 沿指定轴连接两个或多个Series或DataFrame。
    • pd.merge(): 合并两个DataFrame。
    • pd.pivot_table(): 创建数据透视表。
    • pd.cut(), pd.qcut(): 将连续变量离散化。
    • pd.to_datetime(): 将字符串转换为日期时间对象。

Pytorch学习

两大法宝

dir方法,列出所有工具

help方法,工具使用说明

Python类

self

类的方法第一个参数是self,指调用方法时将类的实例作为self参数传入

常用的内置方法

  1. __init__: 构造方法,用于初始化对象的状态,在创建对象时自动调用。

  2. __call__:当一个对象(实例)被当作函数一样被调用时触发。

    image = transform(image)
    # 此时就是调用transform实例的call方法,返回一个tensor类型class MyClass:  def __call__(self, *args, **kwargs):  # *args是一个元组代表接受位置参数,**kwargs是一个字典代表接受关键字参数print(f"Positional arguments: {args}")  print(f"Keyword arguments: {kwargs}")  obj = MyClass()  
    obj(1, 2, 3, a=4, b=5)  # 这会调用 __call__ 方法并打印参数
  3. __del__: 析构方法,在对象被销毁(删除)时调用。

  4. __str__: 返回对象的字符串表示,通常在使用print()函数打印对象时被调用。

  5. __repr__: 返回对象的“官方”字符串表示,通常用于调试和日志记录。

  6. __len__: 返回对象的长度,通常在调用内置函数len()时被调用。

  7. __getitem____setitem__: 用于实现对象的索引访问和赋值操作,可以直接用obj[index]执行getitem/setitem方法

    当你创建一个类并定义了 __getitem__ 方法时,这个类就变成了可索引的对象,你可以通过索引来访问它的元素

  8. __contains__: 用于检查对象是否包含某个值,通常在使用in关键字时被调用。

Tensor 张量

将image格式转换为tensor数据类型

TensorBoard 可视化

torch.utils.tensorboard.SummaryWriter在TensorBoard中可视化记录训练过程中的各种指标,如损失、准确度、权重等

  1. 切换pytorch环境
conda activate pytorch
  1. 开启tensorboard
tensorboard --logdir=.\logs

tensorborad会读取logs文件夹下生成的event事件,在6006端口显示

!使用tensorborad可以在代码中增加图片(比如writer.add_image("resize-512", img_resize,2)),但是不能直接修改图片,这样做刷新后不会更新视图(解决:重新启动)

Transform

transforms.ToTensor()

transforms.Resize()

transforms.Normalize()

Normalize 归一化

  • mean 平均值

  • std 标准差

  • input 输入数据

i n p u t = i n p u t − m e a n / s t d input = input-mean/std input=inputmean/std
将数据局限在[-1,1]范围内

nn.Module

nn.Module是所有神经网络的继承类

def __init__(self):#继承父类初始化方法super().__init__()def forward(self,input):return ouput

卷积神经网络

卷积层

  • input输入

    • in_channel 输入通道数
    • out_channel 输出通道数(几个卷积核对应几个)
  • kernel卷积核

    • 一般设为3,表示3x3的卷积核
  • stride 步长

  • *padding 边距

在这里插入图片描述

池化层

最大池化操作:选取最大的一个值
在这里插入图片描述

在这里插入图片描述

泰坦尼克号预测

输入csv文件,预测乘客是否存活,输出一个csv文件。
其实是一个二分类问题

数据处理

  1. 选取哪些特征,舍弃哪些特征
  2. 处理空值,错误值
# 数据预处理
data = data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'],axis=1)  # 删除不需要的列
data['Sex'] = data['Sex'].map({'male': 0, 'female': 1})  # 将性别转换为0和1# 处理缺失值
data['Age'].fillna(data['Age'].mean(), inplace=True)
data['Fare'].fillna(data['Fare'].mean(), inplace=True)
data['Pclass'] = data['Pclass'].astype('category')  # 将Pclass转换为类别类型
data = pd.get_dummies(data)  # 对分类变量进行独热编码# 分割特征和标签
X = data.drop('Survived', axis=1)
y = data['Survived']

创建模型

预测

import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 读取CSV文件
data = pd.read_csv('train.csv')# 数据预处理
data = data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'],axis=1)  # 删除不需要的列
data['Sex'] = data['Sex'].map({'male': 0, 'female': 1})  # 将性别转换为0和1# 处理缺失值
data['Age'].fillna(data['Age'].mean(), inplace=True)
data['Fare'].fillna(data['Fare'].mean(), inplace=True)
data['Pclass'] = data['Pclass'].astype('category')  # 将Pclass转换为类别类型
data = pd.get_dummies(data)  # 对分类变量进行独热编码# 分割特征和标签
X = data.drop('Survived', axis=1)
y = data['Survived']# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.95, random_state=42)# 将数据转换为PyTorch张量
X_train_tensor = torch.tensor(X_train, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train.values, dtype=torch.float32).view(-1, 1)
X_test_tensor = torch.tensor(X_test, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test.values, dtype=torch.float32).view(-1, 1)# 定义神经网络模型
class TitanicModel(nn.Module):def __init__(self, input_size):super(TitanicModel, self).__init__()self.fc1 = nn.Linear(input_size, 64)self.fc2 = nn.Linear(64, 32)self.fc3 = nn.Linear(32, 1)self.sigmoid = nn.Sigmoid()def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))x = self.sigmoid(self.fc3(x))return x# 实例化模型
input_size = X_train.shape[1]
model = TitanicModel(input_size)# 定义损失函数和优化器
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
epochs = 100
for epoch in range(epochs):optimizer.zero_grad()outputs = model(X_train_tensor)loss = criterion(outputs, y_train_tensor)loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}')# 在测试集上评估模型
with torch.no_grad():outputs = model(X_test_tensor)predicted = (outputs >= 0.5).float()accuracy = (predicted == y_test_tensor).sum().item() / len(y_test_tensor)print(f'Accuracy on test set: {accuracy:.2f}')# /* ******************************* */
# 加载测试数据
test_data = pd.read_csv('test.csv')
# print(test_data.isnull().any(axis=0))
X_test = test_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'], axis=1)  # 删除不需要的列
X_test['Sex'] = X_test['Sex'].map({'male': 0, 'female': 1})  # 将性别转换为0和1# 处理缺失值
X_test['Age'].fillna(X_test['Age'].mean(), inplace=True)
X_test['Fare'].fillna(X_test['Fare'].mean(), inplace=True)
X_test['Pclass'] = X_test['Pclass'].astype('category')  # 将Pclass转换为类别类型
X_test = pd.get_dummies(X_test)  # 对分类变量进行独热编码print(X_test.head(5))
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_test)X_test_tensor = torch.tensor(X_scaled, dtype=torch.float32)
# 输出结果到CSV文件
with torch.no_grad():model.eval()  # 设置模型为评估模式outputs = model(X_test_tensor)predictions = (outputs >= 0.5).int().numpy().flatten()results = pd.DataFrame({'PassengerId': test_data['PassengerId'], 'Survived': predictions})results.to_csv('results.csv', index=False)

http://www.mrgr.cn/news/48678.html

相关文章:

  • 元学习案例(学习如何学习)
  • 基于 CSS Grid 的简易拖拉拽 Vue3 组件,从代码到NPM发布(2)- NPM发布、在线示例
  • ROS2 与 ROS1 的 CMakeLists.txt 文件区别
  • K8s-services+pod详解1
  • 剧场的客户端形式区别,APP,小程序,H5的不同优势以及推广方案
  • Spring框架中的单例Bean是线程安全的么?
  • 论文 | Context-faithful Prompting for Large Language Models
  • [红队apt]自解压文件攻击
  • 无人机之交互系统篇
  • JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例
  • 财政部今日新闻发布会深度解析
  • 空间解析几何4-空间中线段到圆的距离【附MATLAB代码】
  • 【入门第3课】Splunk字段提取
  • 微前端简单实用
  • 哪个软件可以在线编辑ppt? 一口气推荐5个做ppt的得力助手!
  • 微调大型语言模型:根据您的需求定制Llama 3 8B
  • flutter 仿淘宝推荐二级分类效果
  • CDGA|数据治理:从理念到实践,为企业价值赋能的关键路径
  • 鸿蒙开发之ArkUI 界面篇 三十三 Builder(封装容器)
  • antd table合并复杂单元格、分组合并行、分组合并列、动态渲染列、嵌套表头