MLP实现非线性二分类 keras简单应用

import pandas as pd
import numpy as np
data = pd.read_csv("MLP_test_data.csv")
data.head()

在这里插入图片描述
数据自己用excel生成的…
再处理一下输出:

print(type(data),type(data.loc[:,'x']))
data_x = []
data_y = []
data_lable = []
for index, row  in data.iterrows():
    # print(type(row),row['x'],row['y'])
    data_x.append(row['x'])
    data_y.append(row['y'])
    if(row['x'] < 5 and row['y'] >5):
        data_lable.append(1)
    elif(row['x'] > 5 and row['y'] <5):
        data_lable.append(1)
    elif(row['x'] <5 and row['y'] <5):
        data_lable.append(0)
    elif(row['x'] >5 and row['y'] >5):
        data_lable.append(0)
    else:
        data_lable.append(2)
    pass
# res = pd.Series(data,index=["d","c","b","a"])
print(data_x)
print(data_lable)

data_new = {
        'x1':data_x,
        'x2':data_y,
        'y':data_lable}
df = pd.DataFrame(data_new)
df.head()

在这里插入图片描述

X = df.drop(['y'],axis=1)
y = df.loc[:,'y']
y.head()
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(5,5))
passed = plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
failed = plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])
plt.legend((passed,failed),("passed","failed"))
plt.title("raw data")
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

在这里插入图片描述

#分离样本
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=10)
print(X_train.shape,X_test.shape,X.shape)

(236, 2) (117, 2) (353, 2)

#构建模型
from keras.models import Sequential
from keras.layers import Dense,Activation
mlp = Sequential()
mlp.add(Dense(units=20,input_dim=2,activation="sigmoid"))#20个神经元 激活函数digmoid
mlp.add(Dense(units=1,activation="sigmoid"))
mlp.summary()

在这里插入图片描述

#配置模型参数
#优化方法 损失函数
mlp.compile(optimizer="adam",loss="binary_crossentropy")#二分类的
#模型训练
mlp.fit(X_train,y_train,epochs=3000)#迭代次数

在这里插入图片描述迭代3000次

#预测 训练集 准确率
y_train_predict = mlp.predict_classes(X_train)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_train,y_train_predict)
print(accuracy)

0.9449152542372882

#预测 测试数据集
y_test_predict = mlp.predict_classes(X_test)
accuracy = accuracy_score(y_test,y_test_predict)
print(accuracy)

0.9145299145299145

y_train_predict_form = pd.Series(i[0] for i in y_train_predict)
print(y_train_predict_form)

#画图的点集
xx , yy = np.meshgrid(np.arange(0,10,0.1),np.arange(0,10,0.1))
x_range = np.c_[xx.ravel(),yy.ravel()]
y_range_predict = mlp.predict_classes(x_range)
print(type(y_range_predict))

#转换格式
y_range_predict_form = pd.Series(i[0] for i in y_range_predict )
%matplotlib inline
fig2 = plt.figure(figsize=(5,5))
passed_predict = plt.scatter(x_range[:,0][y_range_predict_form == 1],x_range[:,1][y_range_predict_form == 1])
failed_predict = plt.scatter(x_range[:,0][y_range_predict_form == 0],x_range[:,1][y_range_predict_form == 0])

passed = plt.scatter(X.loc[:,'x1'][y==1],X.loc[:,'x2'][y==1])
failed = plt.scatter(X.loc[:,'x1'][y==0],X.loc[:,'x2'][y==0])

plt.legend((passed,failed,passed_predict,failed_predict),("passed","failed","passed_predict","failed_predict"))
plt.title("prediction data")
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
PyTorch是一个流行的深度学习框架,可以用于实现各种机器学习模型,包括多层感知机(MLP)。下面是一个简单的PyTorch MLP实现二分类的示例: ```python import torch import tor.nn as nn import torch.optim as optim # 定义MLP模型 class MLP(nn.Module): def ____(self, input_size, hidden_size, output_size): super(MLP, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) self.sigmoid = nn.Sigmoid() forward(self, x): out = self.fc(x) out = self.relu(out) out = self.fc2(out) out = self.sigmoid(out) return out # 定义训练数据和标签 x_train = torch.tensor([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=torch.float32) y_train = torch.tensor([[0], [1], [1], [0]], dtype=torch.float32) # 定义模型参数 input_size = 2 hidden_size = 4 output_size = 1 # 创建模型实例 model = MLP(input_size, hidden_size, output_size) # 定义损失函数和优化器 criterion = nn.BCELoss() optimizer = optim.SGD(model.parameters(), lr=0.1) # 训练模型 num_epochs = 1000 for epoch in range(num_epochs): # 前向传播 outputs = model(x_train) loss = criterion(outputs, y_train) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 每100个epoch打印一次损失值 if (epoch+1) % 100 == 0: print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # 测试模型 x_test = torch.tensor([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=torch.float32) with torch.no_grad(): predictions = model(x_test) predicted_labels = (predictions >= 0.5).float() print('Predictions:') for i in range(len(x_test)): print('Input: {}, Predicted Label: {}'.format(x_test[i].tolist(), predicted_labels[i].item())) ``` 这个示例中,我们定义了一个包含两个隐藏层的MLP模型,输入大小为2,输出大小为1。使用二进制交叉熵损失函数和随机梯度下降优化器进行训练。训练完成后,我们使用训练好的模型进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nickdlk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值