多层感知器
1.读取数据
data = pd.read_csv(‘HR.csv’)
2.查看数据
data.info()
3.将object数据转换
pd.get_dummies() ------>转换成独热编码
data = data.join(pd.get_dummies(data.part))
del data['part'] #删除part列
data = data.join(pd.get_dummies(data.salary))
del data['salary']
4.将数据转换成tensor
X_data = data[c for c in data.columns if c != left].values().astype('flowat')
Y_data = data['left'].values()
5.划分数据集----train,test
from sklearn.model_selection import train_test_split
from torch.utils.data import TensorDataset,DataLoader
train_x,test_x,train_y,test_y = train_test_split(X_data,Y_data)
train_x = torch.from_numpy(train_x).type('torch.FloatTeensor')
train_y = torch.from_numpy(train_y).type('torch.FloatTeensor')
test_x = torch.from_numpy(test_x).type('torch.FloatTeensor')
test_y = torch.from_numpy(test_y).type('torch.FloatTeensor')
HR_train_ds = TensorDataset(trian_x,train_y)
HR_test_ds = TensorDataset(test_x,test_y)
HR_train_dl = DataLoader(HR_train_ds ,batch_size = 64,shuffle= True)
HR_test_dl = DataLoader(HR_test_ds,batch_size = 64)
6.创建模型
class Model(nn.Module):
def __init__(self):
super().__init__()
self.linear1 = nn.Linear(20,64)
self.linear2 = nn.Linear(64,64)
self.linear3 = nn.Linear(64,1)
self.relu = nn.Relu()
self.sigmoid = nn.Sigmoid()
def forward(self,input):
x = self.linear1(input)
x = self.relu(x)
x = self.linear2(x)
x = self.relu(x)
x = self.linear3(x)
x = self.sigmoid(x)
return x
model = Model()
loss_fn = nn.BCELoss()
opt = torch.optim.Adam(model.parameters(),lr = 0.0001)
epoches = 100
7. 编写acc
def get_acc(y_pred,y):
y_pred = (y_pred >0.5).type('torch.int32')
acc = (y_pred == y ).float().mean()
return acc
8.训练过程
for epoch in range(epoches):
for x,y in HR_trian_dl:
y_pred = model(x)
loss = loss_fn(y_pred,y)
opt.zero_grad()
loss.backward()
opt.step()
with torch.no_grad():
epoch_train_acc = get_acc(model(train_x),train_y)
epoch_test_acc = get_acc(model(test_x),test_y)
epoch_train_loss = loss_fn(model(train_x),train_y)
epoch_test_loss = loss_fn(model(test_x),test_y)
print('epoch:',epoch,'train_acc:',epoch_train_acc.item(),'loss:',epoch_train_loss.item(),epoch_test_acc.item(),'loss:',epoch_test_loss.item())