目录
实验环境
- Python 3.6
- NumPy: 1.14.2
- Matplotlib: 2.2.2
- Pandas: 0.22.0
- scikit-learn: 0.19.1
1.原型感知机概览
2.感知机python代码
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 4 10:25:06 2018
人工神经网络--感知机分类
数据:
http://labfile.oss.aliyuncs.com/courses/1081/course-12-data.csv
"""
"""加载数据集
"""
import pandas as pd
df = pd.read_csv("course-12-data.csv", header=0) # 加载数据集
#print('df',df)#df X0 X1 Y 5.1 3.5 -1
"""感知机随机梯度下降算法实现
"""
def perceptron_sgd(X, Y, alpha, epochs):
"""
参数:
X -- 自变量数据矩阵
Y -- 因变量数据矩阵
alpha -- lamda 参数
epochs -- 迭代次数
返回:
w -- 权重系数
b -- 截距项
"""
w = np.zeros(len(X[0])) # 初始化参数为 0
b = np.zeros(1)
for t in range(epochs): # 迭代
for i, x in enumerate(X):
if ((np.dot(X[i], w)+b)*Y[i]) <= 0: # 判断条件
w = w + alpha*X[i]*Y[i] # 更新参数
b = b + alpha*Y[i]
return w, b
"""感知机求最佳分割线
"""
import numpy as np
X = df[['X0','X1']].values
Y = df['Y'].values
#print('YYYY',Y)
alpha = 0.0005
epochs = 1000#数据总长度
L=perceptron_sgd(X, Y, alpha, epochs)#(array([ 4.93, -6.98]), array([-3.3]))
print(L)#函数为f(x)=4.93∗x1−6.98∗x2−3.3
"""求解分类正确率
"""
w1 = L[0][0]
w2 = L[0][1]
b = L[1]
z = np.dot(X, np.array([w1, w2]).T) + b #f(x)式子
np.sign(z) #感知机公式
from sklearn.metrics import accuracy_score
a=accuracy_score(Y, np.sign(z)) #预测准确率 0.986666666666