筆記6 多分類問題(練習篇)

2022-06-08 17:15:09 字數 4091 閱讀 7125

import torch

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from torch import nn

import torch.nn.functional as f

from torch.utils.data import tensordataset

from torch.utils.data import dataloader

from sklearn.model_selection import train_test_split

%matplotlib inline

先把資料載入出來,觀察資料的特點,為進一步預處理做準備

data = pd.read_csv('e:/datasets2/1-18/dataset/daatset/iris.csv')
把data輸出一下

觀察發現,最後一列(species為文字),我們可以先輸出一下看看有哪些類

data.species.unique()
發現有三類 setosa, versicolor, virginica

然後我們可以對這三類進行編碼,setosa為0, versicolor為1, virginica為2

data['species'] = pd.factorize(data.species)[0]
這裡的pd.factorize()方法,可以將species編碼,然後再將data的species列替換成這些編碼即可

這時,我們再輸出一下data

這裡有乙個需要注意的地方,就是y沒有進行shape的變換。這是因為後面的損失函式要求標籤是一維的,因此不需要變換。

當然,如果變換了,後面會給出報錯,再進行相應的修改,也是沒問題的

class model(nn.module):

def __init__(self):

super().__init__()

self.linear_1 = nn.linear(4, 32)

self.linear_2 = nn.linear(32, 32)

self.linear_3 = nn.linear(32, 3)

def forward(self, input):

x = f.relu(self.linear_1(input))

x = f.relu(self.linear_2(x))

x = self.linear_3(x)

return x

這裡需要注意一點,就是理論上最後需要再啟用,但是因為損失函式的設定,因此不用再啟用

model = model()

loss_func = nn.crossentropyloss()

optimizer = torch.optim.adam(model.parameters(), lr = 0.0001)

epochs = 100

最後得到的是三個值,也就是每一類都有乙個值,因此最大的那個才是**結果。可以採用torch.argmax(y_pred, dim = 1)實現

def accuracy(y_pred, y_true):

y_pred = torch.argmax(y_pred, dim = 1)

acc = (y_pred == y_true).float().mean()

return acc

這裡我們想最後輸出損失值以及準確率,因此我們用列表儲存一下

分類(6) 不平衡和多分類問題

原版 一 不平衡問題 1 不平衡資料 例如 乙個產品生產的不合格產品數量會遠低於合格產品數量。信用卡欺詐的檢測中,合法交易遠遠多於欺詐交易。這時候,準確率的度量會出現一些問題,因為她把每個類都看得同等重要。例如,1 的信用卡交易是欺詐行為,則 每個交易都是合法的模型有99 的準確率,它也可能檢測不到...

Tensorflow 多分類問題

import requests import numpy as np 複製 r requests.get 複製 with open iris.data w as f f.write r.text 複製 import pandas as pd 複製 data pd.read csv iris.data...

XGBoost解決多分類問題

xgboost官方給的二分類問題的例子是區別蘑菇有無毒,資料集和 都可以在xgboost中的demo資料夾對應找到,我是用的anaconda安裝的xgboost,實現起來比較容易。唯一的梗就是在終端中執行所給命令 xgboost mushroom.conf 時會報錯,是路徑設定的問題,所以我乾脆把x...