演算法思想源自**:
段潔、胡清華、張靈均,等. 基於鄰域粗糙集的多標記分類特徵選擇演算法 [j]
. 計算機研究與發展,2015,52(1
):56-
65
因為沒找到python源**,所以自己試著寫了一下,結果是對應上的。
**分享在這裡,需要的自取
"""
author: wzk
date: 2020-10-11
theme: 多標記鄰域粗糙集特徵選擇演算法
"""from settings.setting import
*class
armlnrs
:"""
基於鄰域粗糙集的多標籤特徵選擇
可以用歐式距離處理連續型別的資料集
1、輸入資料集,訓練集
2、雙重for迴圈,二重迴圈下,計算當前屬性依賴度
3、前向貪心搜尋
"""def__init__
(self, train_data, train_target, test_data, test_target, delta, info)
:"""
初始化物件引數
:param train_data: 訓練集資料
:param train_target: 訓練集標籤
:param test_data: 測試集資料
:param test_target: 測試集標籤
:param delta: δ鄰域的值,
:param info: config項中的配置,實驗結果記錄會用到這個
"""self.train_data = train_data
self.train_target = train_target
self.test_data = test_data
self.test_target = test_target
self.info = info
self.delta = delta
pass
defcompute_corr
(self, i, j, tmp_train_data)
:"""
計算相關性
:param i: 迴圈第i次
:param j: 當前特徵
:param tmp_train_data: 臨時資料
:return:
"""if i ==0:
tmp_train_data = self.train_data[
:, j]
# 每一輪更新乙個臨時資料集,用以測試不同特徵下的依賴度的不同
else
: tmp_train_data = np.insert(tmp_train_data, tmp_train_data.shape[1]
, self.train_data[
:, j]
, axis=1)
# 計算樣本的δ鄰域
delta_neighbor_dict =
dict()
for k in
range
(self.train_data.shape[0]
):delta_neighbor_list =
list()
for v in
range
(self.train_data.shape[0]
):dis = np.sqrt(np.
sum(
(tmp_train_data[k]
- tmp_train_data[v])**
2))if dis <= self.delta:
delta_neighbor_dict.update(
)# 對每個樣本判斷是否在δ鄰域內,是的話更新鄰域樣本的列表
sample_list =
list()
for k in
range
(self.train_data.shape[0]
):count_issubset =
0 count =
0for v in
range
(self.train_target.shape[1]
):if self.train_target[k, v]==1
: count +=
1# 每個標籤下不同類別及其對應樣本索引
target_equivalence_class = defaultdict(
list
)for m, n in
[(n, m)
for m, n in
list
(enumerate
(self.train_target[
:, v]))
]:target_equivalence_class[m]
# 前者是否是後者子集
ifset
(delta_neighbor_dict.get(k)
).issubset(target_equivalence_class.get(1)
):count_issubset +=
1else
:break
if count_issubset == count:
# 計算當前特徵下的屬性依賴度
corr =
len(sample_list)
/ self.train_data.shape[0]
return corr
defarmlnrs
(self)
:"""
1、一階段,計算當前特徵子集與候選特徵子集中任意乙個特徵後的屬性依賴度
2、屬性依賴度的計算,依賴於滿足鄰域近似條件的樣本數目
3、鄰域近似條件指的是當樣本的δ鄰域內的樣本屬於樣本分類標記中的任意乙個標記下的等價類內,該樣本滿足鄰域條件
4、樣本的δ鄰域計算是樣本與任意個樣本進行計算,獲取距離,小於δ則加入鄰域,
5、標籤等價類是指樣本被標記的正類
:return:
"""feature_num = self.train_data.shape[1]
feature_list =
list()
corr_first =
0print
("初始依賴度為0"
)for i in
range
(feature_num)
: tmp_train_data = self.train_data[
:, feature_list]
max_corr =
0 max_index =
0for j in
range
(self.train_data.shape[1]
):if j in feature_list:
continue
corr = self.compute_corr(i, j, tmp_train_data)
print
("當前特徵數:"
,len
(feature_list)
,"當前特徵:"
, j,
"當前corr:"
, corr,
"最大corr:"
, corr_first)
if max_corr < corr:
max_corr = corr
max_index = j
if corr_first < max_corr:
corr_first = max_corr
else
:break
return self.train_data[
:, feature_list]
, self.train_target, self.test_data[
:, feature_list]
, self.test_target
pass
粗糙集分類
粗糙集理論 粗糙集理論 rough set theory 是乙個種處理資料分類的資料探勘方法。當資料屬於定性資料或不確定性資料,無法使用一般的統計方法時,粗糙集理論可以在資訊不完整和資訊不一致下,用來規約資料集合,發掘隱藏的資料陽性和資料相關性,以產生有用的分類規則。粗糙集理論現在主要應用在 臨床醫...
粗糙集理論介紹
粗糙集理論介紹 面對日益增長的資料庫,人們將如何從這些浩瀚的資料中找出有用的知識?我們如何將所學到的知識去粗取精?什麼是對事物的粗線條描述什麼是細線條描述?a r1 顏色分類 a r2 形狀分類 a r3 大小分類 上面這些所有的分類合在一起就形成了乙個基本的知識庫。那麼這個基本知識庫能表示什麼概念...
粗糙集基本理論
此方法基於粗糙集理論,對於粗糙集方面的知識,請參考這篇部落格 該部落格已經很好講了粗糙集的基本知識,我這裡就不重複了,請你反覆確認是否已經明白了下近似和上近似的概念。說白了,乙個屬性上的等價類集合 即劃分 就是關於這個屬性的知識,而其中的乙個等價類就是乙個概念,可以結合上面部落格中關於顏色知識的例子...