使用sklearn的MLP实现神经网络分类,数据分别使用随机样本2分类和任意标准数据集测试,并且进行数据可视化的完整代码
时间: 2024-11-27 18:14:02 浏览: 16
在Python中,我们可以使用scikit-learn库(sklearn)中的`MultiLayerPerceptron`(MLP)模块来创建一个多层感知机进行二分类任务。这里是一个简单的例子,首先我们会生成一些随机数据,然后训练模型,最后对测试集进行预测并可视化结果。
```python
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
# 定义数据生成函数 (假设我们有10维特征)
def generate_random_data(n_samples, n_features):
X = np.random.rand(n_samples, n_features)
y = np.where(X[:, 0] > 0.5, 1, 0) # 随机设置标签,X的第一维度作为决策边界
return X, y
# 数据生成
n_samples = 1000
n_features = 10
X, y = generate_random_data(n_samples, n_features)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建并训练多层感知机
mlp = MLPClassifier(hidden_layer_sizes=(16, 8), activation='relu', solver='adam', max_iter=1000)
mlp.fit(X_train, y_train)
# 预测并评估
y_pred = mlp.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 可视化决策边界
plt.figure(figsize=(8, 6))
colors = ['red', 'blue']
for i in range(2):
idx = np.where(y == i)[0]
plt.scatter(X[idx, 0], X[idx, -1], color=colors[i])
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, -1].min() - 1, X[:, -1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
np.linspace(y_min, y_max, 100))
Z = mlp.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8, cmap='RdYlBu_r')
plt.xlabel('Feature 1')
plt.ylabel('Feature 9') # 选择一个可视化决策边界的特征
plt.legend(['Class 0', 'Class 1'], loc='upper left')
plt.title("Decision Boundary for MLP")
plt.show()
阅读全文