邻域粗糙集属性约简py代码
时间: 2023-05-16 19:01:43 浏览: 165
粗糙集属性约简python
邻域粗糙集是一种数据降维方法,它可以从原始数据中删除冗余属性,并保留最具代表性的属性特征。邻域粗糙集属性约简的py代码如下:
```
def NRS_reduction(dataset, k):
"""
邻域粗糙集属性约简
dataset: 数据集,每行代表一个样本,每列代表一个属性
k: 邻域大小
"""
n_samples, n_features = dataset.shape
S = list(range(n_features)) # 初始化属性集合
C = np.zeros(n_features) # 初始化属性的分类能力
c_count = np.zeros(n_features) # 初始化每个属性被正确分类的次数
# 计算所有属性的分类能力
for i in range(n_samples):
for j in range(n_features):
if dataset[i][j] == 1:
for f in set(S).difference({j}):
if (np.sum(dataset[:, [f, j]], axis=1) == 2).sum() >= k:
c_count[f] += 1
if dataset[i][-1] == 1:
C[f] += 1
break
# 根据分类能力进行属性约简
while True:
max_c = np.max(C) # 找到分类能力最大的属性
if max_c == 0:
break
max_idx = np.argmax(C)
S.remove(max_idx) # 从属性集合中删除该属性
# 更新分类能力
for i in range(n_samples):
if dataset[i][max_idx] == 1:
if dataset[i][-1] == 1:
for f in S:
if dataset[i][f] == 1:
c_count[f] -= 1
C[f] = c_count[f] / (n_samples - c_count[f])
else:
for f in S:
if dataset[i][f] == 1:
C[f] = c_count[f] / (n_samples - c_count[f])
return S
```
该函数接受一个数据集和邻域大小k作为输入,输出一个约简后的属性集合S。函数首先计算所有属性的分类能力,然后根据分类能力进行属性约简,直到无法继续约简为止。在约简过程中,每个属性的分类能力和正确分类次数都会被更新。函数最终输出约简后的属性集合S,即保留最具代表性的属性特征。
阅读全文