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的迭代器。
后续操作:
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]