• Pytorch 实现逻辑回归


    1 导入实验需要的包

    import numpy as np
    import pandas as pd 
    import torch
    from torch import nn
    import matplotlib.pyplot as plt
    from torch.autograd import Variable
    from torch.utils.data import DataLoader,TensorDataset
    import os
    os.environ["KMP_DUPLICATE_LIB_OK"]  =  "TRUE"

    2 加载数据集

    data =pd.read_csv("./dataset/credit-a.csv")
    X = data.iloc[:,:-1]  
    Y = data.iloc[:,-1]  

    3 数据转换

    Y = Y.replace(-1,0)  #替换标签 -1 ,改成 0 
    Y.unique() #查看有几种标签数据
    #数据转换为Tensor
    X = torch.from_numpy(X.values).type(torch.float32)
    Y = torch.from_numpy(Y.values.reshape(-1,1)).type(torch.float32)

    4 设置迭代器,将数据转换在cuda下

    def load_data(X,Y,batch_size):
        X = torch.autograd.Variable(X).cuda()
        Y = torch.autograd.Variable(Y).cuda()
        print("type x",X)
        data = TensorDataset(X,Y)
        data_loader = DataLoader(data,batch_size,shuffle=True)
    #     data_loader = DataLoader(data,batch_size,shuffle=False)
        return data_loader

    5 参数初始化及读取数据

    batchs_size = 16
    data_iter = load_data(X,Y,batchs_size)
    #最后的代码用到了,cpu()那行
    X = torch.autograd.Variable(X).cuda()
    Y = torch.autograd.Variable(Y).cuda()

    6 设置模型

    model = nn.Sequential()
    model.add_module('mylinear1',nn.Linear(15,1))
    model.add_module('mysigmoid',nn.Sigmoid())
    if torch.cuda.is_available():
        model.cuda()

    7 设置损失函数

    loss_fn = nn.BCELoss()

    8 设置优化器

    optimizer = torch.optim.Adam(model.parameters(),lr=0.0001)
    # optimizer = torch.optim.SGD(model.parameters(),lr=0.001)

    9 训练模型

    epochs = 150
    for epoch in range(epochs):
        correct = 0
        for x,y in data_iter:
            y_hat = model(x)
            loss = loss_fn(y_hat,y)
    #         print(y_hat.ge(0.5))
            out = y_hat.ge(0.5).float()  # 以0.5为阈值进行分类
            correct += (out == y).sum()  # 计算正确预测的样本个数
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
        print("epoch  %d ,current acc = %.4f"%(epoch+1,correct/Y.shape[0]))
        print("epoch  %d ,current loss = %.4f"%(epoch+1,loss))

    10 其他

    # ((model(X).data.numpy()> 0.5).astype('int')==Y.numpy()).mean()
    ((model(X).data.cpu().numpy()> 0.5).astype('int')==Y.cpu().numpy()).mean()
    model(X).data.cpu()

    因上求缘,果上努力~~~~ 作者:希望每天涨粉,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/15432982.html

  • 相关阅读:
    JustOj 1936: 小明A+B
    Codeforce 835B
    Codeforce 835A
    Java读取Properties工具类
    IDEA2019 断点调试
    Pagination+AngularJS实现前端的分页
    PageHelper实现分页
    100多个免费API接口分享 调用完全不限次数,以后总用得着
    HDU 5763 Another Meaning KMP+DP
    Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum 离线+线段树
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/15432982.html
Copyright © 2020-2023  润新知