# 导入所需库和模块
from tensorflow.keras.layers import Dense, Input, Activation # 导入神经网络层和激活函数模块
from tensorflow.keras.models import Sequential # 导入Keras的Sequential模型
import pandas as pd # 导入Pandas库用于数据处理
import numpy as np # 导入NumPy库用于数值计算
from matplotlib import pyplot as plt # 导入Matplotlib库用于数据可视化
from sklearn.model_selection import train_test_split # 导入数据集分割模块
from sklearn.metrics import accuracy_score # 导入评估模块
# 创建神经网络模型
model = Sequential() # 创建Sequential模型,用于堆叠神经网络层
# 添加输入层和隐藏层
model.add(Dense(units=20, input_dim=2, activation='sigmoid')) # 添加具有20个神经元和sigmoid激活函数的隐藏层
model.add(Dense(units=1, activation='sigmoid')) # 添加具有1个神经元和sigmoid激活函数的输出层
# 查看模型结构摘要
model.summary()
# 编译模型,配置优化器、损失函数和评估指标
model.compile(loss='categorical_crossentropy', # 使用分类交叉熵作为损失函数
optimizer='sgd', # 使用随机梯度下降算法进行优化
metrics=['accuracy']) # 评估指标为准确率
data = pd.read_csv('D:/pythonDATA/data.csv') # 从CSV文件中读取数据
X = data.drop(['y'], axis=1) # 特征变量
y = data.loc[:, 'y'] # 目标变量
# 数据可视化
fig1 = plt.figure(figsize=(5, 5)) # 创建画布
passed = plt.scatter(X.loc[:, 'x1'][y == 1], X.loc[:, 'x2'][y == 1]) # 目标为1的数据点
filed = plt.scatter(X.loc[:, 'x1'][y == 0], X.loc[:, 'x2'][y == 0]) # 目标为0的数据点
plt.legend((passed, filed), ('passed', 'filed')) # 设置图例
plt.xlabel('x1') # x轴标签
plt.ylabel('x2') # y轴标签
plt.title('raw data') # 标题
plt.show() # 显示图形
# 数据分割(训练集和测试集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=10) # 将数据集划分为训练集和测试集
# 重新编译模型以使用不同的优化器和损失函数
model.compile(optimizer='adam', loss='binary_crossentropy') # 配置解决问题的方法和损失函数
# 进行拟合训练,迭代训练三千次,降低其损失函数
model.fit(X_train, y_train, epochs=3000) # 拟合模型,进行训练
# 进行预测
y_test_predict = model.predict_classes(X_test) # 对测试集进行预测
accuracy_test = accuracy_score(y_test, y_test_predict) # 计算预测准确率
# 生成范围内的预测结果
xx, yy = np.meshgrid(np.arange(0, 1, 0.01), np.arange(0, 1, 0.01)) # 创建预测范围
x_range = np.c_[xx.ravel(), yy.ravel()] # 生成范围内所有点的坐标
print("输出坐标:")
print(x_range)
y_range_predict = model.predict_classes(x_range) # 预测范围内所有点的类别
# 格式化输出并绘图展示结果
y_range_predict_form = pd.Series(i[0] for i in y_range_predict) # 将预测结果格式化为Series类型
print(y_range_predict_form) # 打印格式化后的预测结果
print(accuracy_test) # 打印预测准确率
fig2 = plt.figure(figsize=(5, 5)) # 创建画布
passed_predict = plt.scatter(x_range.loc[:, 'x1'][y == 1], x_range.loc[:, 'x2'][y == 1]) # 预测为1的数据点
filed_predict = plt.scatter(x_range.loc[:, 'x1'][y == 0], x_range.loc[:, 'x2'][y == 0]) # 预测为0的数据点
passed = plt.scatter(X.loc[:, 'x1'][y == 1], X.loc[:, 'x2'][y == 1]) # 实际为1的数据点
filed = plt.scatter(X.loc[:, 'x1'][y == 0], X.loc[:, 'x2'][y == 0]) # 实际为0的数据点
plt.legend((passed, filed, passed_predict, filed_predict), ('passed', 'filed', 'passed_predict', 'filed_predict')) # 设置图例
plt.xlabel('x1') # x轴标签
plt.ylabel('x2') # y轴标签
plt.title('raw result') # 标题
plt.show() # 显示图形
tensorflow实现二分类
最新推荐文章于 2024-06-02 18:21:33 发布