本博客包括了批处理感知器算法、Ho-Kashyap算法和MSE多类扩展方法
readData.py
import pandas as pd
import numpy as np
class readData(object):
def __init__(self, io='../数据集.xlsx'):
"""
io:数据集路径 excel格式
"""
df = pd.read_excel(io='../数据集.xlsx')
all_data = df.values # 所有数据 特征+标签
self.data = all_data[:, 0:2] # 提取特征集
self.label = all_data[:, 2] # 提取标签
self.trn_dataA = []
self.trn_dataB = []
self.classA = 0
self.classB = 0
# print(np.max(all_data), np.min(all_data))
# print(self.data)
# print(self.label)
def get_train_data(self, classA=1, classB=2):
self.classA = classA
self.classB = classB
trn_dataA = np.array([self.data[i] for i in range(len(self.data)) if self.label[i] == classA])
trn_dataB = np.array([self.data[i] for i in range(len(self.data)) if self.label[i] == classB])
# print(trn_dataA, trn_dataB)
"""取classA为正类,classB为负类,并进行增广"""
X1 = np.hstack((np.ones((trn_dataA.shape[0], 1)), trn_dataA)) # 每行都插入1
X2 = -1 * np.hstack((np.ones((trn_dataB.shape[0], 1)), trn_dataB)) # 每行插入1后取负值(负类
X = np.vstack((X1, X2)) # 得到增广矩阵
self.trn_dataA = trn_dataA
self.trn_dataB = trn_dataB
return X
def getMSEdata(self):
'''选择每类的前八个为训练集,后两类为测试集'''
trn_x = np.array([self.data[i:i + 8] for i in [0, 10, 20, 30]])
trn_y = np