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...