基于邻域粗糙集python代码实现 邻域粗糙集代码实现 # _*_coding:utf-8 _*_
#@Author :Lucar.xie
#@FileName: Rough_Sets.py
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
def basic_set(df):
basic = {}
for i in df.drop_duplicates().values.tolist():
basic[str(i)] = []
for j, k in enumerate(df.values.tolist()):
if k == i:
basic[str(i)].append(j)
return basic
def Euclidean(x_data):
n = x_data.shape[1]#代表列数
m = x_data.shape[0]#代表行数
num = [0] * n
num2 = np.zeros((m,m))
#转为list
arr = np.array(x_data)
counti,countj,countk,countz = 0,0,0,0
#遍历每一行的元素
for j in arr:
countk = 0
for k in arr:
if countj != countk:
countz = 0
# 遍历每一行的每一个元素
for z in k:
temp = np.square(z - j[countz])
if countz == 0:
num[countz] = temp
else:
#把每一行中每个元素的差值平方相加
num[countz] = num[countz-1] + temp
countz = countz + 1
else:
num[countz-1] = 0
num2[countj][countk] = round(math.sqrt(num[countz-1]),1)
countk = countk + 1
countj = countj + 1
return num2
def key_basic(num,k):
# k = 4 # 设δ=k
# k = [4.0,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5.0]
num1 = {}
counti, countj = 0, 0
for i in num:
num1[counti] = []
countj = 0
for j in i:
if j |