1,ART
2,基本原理
3,计算过程
4,完成Python案例
(1)ART1网络二值输入
import numpy as np
class ART1:
def __init__(self, rho=0.5, beta=0.5):
self.rho = rho # 匹配阈值
self.beta = beta # 学习率
self.W = None # 类别原型矩阵
self.categories = 0 # 当前类别数
def fit(self, X):
n_samples, n_features = X.shape
self.W = np.zeros((0, n_features)) # 初始化空类别
for x in X:
x_norm = x / np.sum(x) # L1归一化
if self.categories == 0: # 第一个样本
self.W = np.vstack([self.W, x_norm])
self.categories += 1
else:
# 计算相似度
similarities = np.dot(self.W, x_norm) / (np.sum(self.W, axis=1) + 1e-8)
i_star = np.argmax(similarities)
if similarities[i_star] >= self.rho:
# 更新类别原型
self.W[i_star] = self.beta * x_norm + (1 - self.beta) * self.W[i_star]
else:
# 创建新类别
self.W = np.vstack([self.W, x_norm])
self.categories += 1
def predict(self, X):
predictions = []
for x in X:
x_norm = x / np.sum(x)
similarities = np.dot(self.W, x_norm) / (np.sum(self.W, axis=1) + 1e-8)
i_star = np.argmax(similarities)
predictions.append(i_star)
return np.array(predictions)
# 示例数据
X = np.array([
[1, 0, 1, 0],
[1, 1, 0, 0],
[0, 0, 1, 1],
[0, 1, 0, 1]
])
# 训练ART1网络
art = ART1(rho=0.6, beta=0.5)
art.fit(X)
# 预测
predictions = art.predict(X)
print("类别分配:", predictions)
5,Python案例的数学解释
完整数学运算过程