python (2) 逻辑回归实例
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python (2) 逻辑回归实例
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                
                            
                            
                            import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#數(shù)據(jù)預(yù)處理
#因?yàn)榘褦?shù)據(jù)集第一列當(dāng)成了表頭,所以寫一句
data = pd.read_csv('C:\\Users\\qjjt\\Desktop\\python\\dataset\\第4章\\credit-a.csv',header=None)
print(data.head())#注意這里第16列是輸出,不是特征值,所以要注意選取
#iloc函數(shù)根據(jù)位置索引,:是所有行都取。:-1取到-1前的列的特征
X = data.iloc[:,:-1]
Y = data.iloc[:,-1]
Y.unique() #查看Y的取值,可看見為1,-1,這里因?yàn)槭沁壿嫽貧w,最好改為0,1
Y = data.iloc[:,-1].replace(-1,0)#將y中的-1替換為0
print(Y.unique())#數(shù)據(jù)預(yù)處理,從pandas轉(zhuǎn)為tensor
X = torch.from_numpy(X.values).type(torch.float32)#X的值轉(zhuǎn)為tensor后指定數(shù)據(jù)類型為float32print(X.shape) #可看出x的值是一個(gè)矩陣
print(Y.values) #可看出y是一個(gè)array,所以需要reshape成列向量的樣子.因?yàn)閄是[653,15],所以Y也要變成[653,1]
Y = torch.from_numpy(Y.values.reshape(-1,1)).type(torch.float32)
print(Y.size()) #torch.Size([653, 1])from torch import  nn#ky直接將多個(gè)層順序組合成一個(gè)模型
# 第一層linear層輸入15個(gè)特征值,輸出一個(gè)參數(shù)
# 第二層sigmoid層轉(zhuǎn)換,輸出0,1
model = nn.Sequential(nn.Linear(15,1),nn.Sigmoid()
)
print(model) #打印看看model樣子#二元交叉熵?fù)p失函數(shù)
loss_fn = nn.BCELoss()#優(yōu)化函數(shù)
opt = torch.optim.Adam(model.parameters(),lr = 0.001)#batch訓(xùn)練,即從訓(xùn)練集中取出一部分訓(xùn)練
batch_size = 16   #一次訓(xùn)練16個(gè)數(shù)據(jù)
no_of_batch = 653//16  #最終要完成訓(xùn)練所花的次數(shù),這里是整除epoches = 1000 #epoche指全部數(shù)據(jù)訓(xùn)練一遍
for epoche in range(epoches):for batch in range(no_of_batch):start = batch*batch_size #每次從start行開始輸入數(shù)據(jù)end = start + batch_sizex = X[start:end] #一個(gè)批次中的x,yy = Y[start:end]y_pred = model(x)loss = loss_fn(y_pred,y)#梯度置零和計(jì)算參數(shù)梯度opt.zero_grad()#后向傳播loss.backward()#優(yōu)化opt.step()#顯示最終計(jì)算出來的w1.w2....w15和b的數(shù)值,
print(model.state_dict())#查看實(shí)際預(yù)測(cè)結(jié)果,這里比較時(shí)都用的numpy
print((model(X).data.numpy() > 0.5).astype('int') == Y.numpy())
#預(yù)測(cè)模型正確率直接求均值即可得
print(((model(X).data.numpy() > 0.5).astype('int') == Y.numpy()).mean) 
                        
                        
                        這里面損失,優(yōu)化,后向傳播概念可以看“反向傳播算法”過程及公式推導(dǎo)(超直觀好懂的Backpropagation)_aift的博客-CSDN博客_反向傳播算法
反向傳播詳解_weixin_40788815的博客-CSDN博客_反向傳播
總結(jié)
以上是生活随笔為你收集整理的python (2) 逻辑回归实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 详解Kafka消息队列的两种模式
- 下一篇: Android 开发资料便签
