[Day 28]粗糙集特徵选择简介-6

这里我用 pandas.DataFrame 里的 groupby 帮我做分类
然後用 apply(list) 把所有列的结果输出
就可以得到论文中一开始所说的「等价类」

# equivalence relation
def eq_relation(f_list, data, item_name, subset = None):
    '''
    f_list : 特徵子集
    data : 观察集
    item_name : 观察集中代表观察样本编号的栏位名称
    subset : 论文之後会用到,当只想看样本子集时可用
    '''
    
    if subset is None:
        subset = data[item_name]
        
    cut = (data[item_name].isin(subset))
    temp = data[cut]
    
    res = temp.groupby(f_list)
    
    return list(res[item_name].apply(list))

由於目前所讲到的粗糙集特徵选取只使用到 POS(内部)
所以这里只写了 POS 的部分
就是一个一个看有哪些 P 的等价类被包含在 Q 的等价类中

def pos_dep(f_list, q_list, data, item_name, subset = None):
    if subset is None:
        subset1 = data[item_name]
    
    if len(f_list)*len(q_list)==0:
        return 0
    
    modP = eq_relation(f_list, data, item_name, subset = subset1)
    modQ = eq_relation(q_list, data, item_name, subset = subset1)
    
    pos_list = [[p for p in modP if len([p1 for p1 in p if p1 not in q])==0] for q in modQ]
    union_pos = list(set().union(*[list(set().union(*p)) for p in pos_list]))
    
    return len(union_pos)/len(data[item_name])

最後就是模仿向前特徵选取
把 pos_dep 当作模型表现力
每次只新增可以让模型表现最好的

def rough_feature_selection(q_list, data, item_name, feature_list, subset = None):
    fs_list = []
    temp_fs = []
    best_performance = 0
    temp_performance = -1
    
    while temp_performance != best_performance:

        temp_performance = best_performance
        
        for f in [feat for feat in feature_list if feat not in fs_list]:
            now_per = pos_dep(f_list = fs_list + [f],
                              q_list = q_list,
                              data = data,
                              item_name = item_name)
            past_per = pos_dep(f_list = fs_list,
                               q_list = q_list,
                               data = data,
                               item_name = item_name)
            
            if now_per > past_per and now_per > best_performance:
                temp_fs = fs_list + [f]
                best_performance = now_per
                
        fs_list = temp_fs
                
    return temp_fs, best_performance

写的还是很冗长请见谅
我还会再多多练习


<<:  [Day27] GO Bot主动传送讯息

>>:  Day27:Azure小白如何使用Azure Kubernetes Service部署Container应用程序

[day-9] 认识Python的基本资料型别!

认识Python的基本资料型别吧!   每个程序语言都有各自独特的资料型别,让我们快速认识Pytho...

Day 1:为什麽工程师要建立自己的技术部落格?

大家好我是 Gui,一名刚於私立科大资管系毕业的社会新鲜人,这是我第一次参与 IT 铁人赛,既紧张又...

Day 14【连动 MetaMask - Front-End Request and Fetch】Modern problems require modern solutions

【前言】 嗨嗨感谢大家愿意看到这里,接下来要说的是前端的呼叫以及资料传递。今天的内容大部份都参考来...

#3 JavaScript Crash Course 2

今天教 Promise Async / Await。 Promise Promise 这个东西跟时间...

如何以 SSH 方式 Clone 在 GitHub 上的项目

以本身自家服务器上的 Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0–74-...