1.Pandas基本操作
Pandas庫內將數據轉換為一種DataFrame類型進行處理
1).讀取數據
data=pd.read_csv(path)
2).提取數據指定行列
data_x=np.asarray(data.ix[:500,:400])
提取了0-499行,0-399列的數據矩陣
讀取相應label列/行
data_y = np.asarray(data["BUILDINGID"])
3).對提取數據進行同樣操作(apply函數)
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
func表示某一函數,axis=0表示對數據列操作,axis=1表示對數據行操作。
2.pytorch-dataset
1).Dataset的定義
pytorch有自帶的一些數據讀取方式,但是需要讀取指定的數據集時,就需要自己定義了。
from torch.utils.data import Dataset, DataLoader
import torch
from sklearn.preprocessing import scale
class Dataset(Dataset):
def __init__(self):
xy = np.loadtxt('./data.csv.gz',dtype=np.float32)
self.len = xy.shape[0]
self.x_data = torch.from_numpy(xy[:, 0:-1])
self.y_data = torch.from_numpy(xy[:, [-1]])
def __getitem__(self, index):
return self.x_data[index], self.y_data[index]
def __len__(self):
return self.len
Dataset定義分為三塊
1.__init__
這一部分需要定義數據讀取的方法,并對數據進行處理,提供返回量
2.__getitem__
這一部分需要返回數據
3.__len__
返回數據的樣本容量
實際上就是構成了一個Dataset的迭代器。
后續(xù)操作:
Dataset = DiabetesDataset()
train_loader = DataLoader(dataset=dataset,
batch_size=32,
shuffle=True,
num_workers=2)
另外,如果需要transfrom操作:
transform = transforms.Compose(
[
transforms.Scale(size),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
]
)
3.nn.CrossEntropyLoss()函數的使用
nn.CrossEntropyLoss(input,target)
這里input是一維向量,而target不能是一維向量(也就是one-hot編碼不能直接拿來計算)
可通過如下轉換:
torch.max(targets, 1)[1]