自学内容网 自学内容网

机器学习pytorch实践1

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)


原文地址:https://blog.csdn.net/weixin_51277037/article/details/138541700

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!