python实现求特征选择的信息增益


Posted in Python onDecember 18, 2018

使用python语言,实现求特征选择的信息增益,可以同时满足特征中有连续型和二值离散型属性的情况。

师兄让我做一个特征选择的代码,我在网上找了一下,大部分都是用来求离散型属性的信息益益,但是我的数据是同时包含二值离散型和连续型属性的,所以这里实现了一下。

代码块

import numpy as np
import math

class IG():
  def __init__(self,X,y):

    X = np.array(X)
    n_feature = np.shape(X)[1]
    n_y = len(y)

    orig_H = 0
    for i in set(y):
      orig_H += -(y.count(i)/n_y)*math.log(y.count(i)/n_y)

    condi_H_list = []
    for i in range(n_feature):
      feature = X[:,i]
      sourted_feature = sorted(feature)
      threshold = [(sourted_feature[inde-1]+sourted_feature[inde])/2 for inde in range(len(feature)) if inde != 0 ]

      thre_set = set(threshold)
      if float(max(feature)) in thre_set:
        thre_set.remove(float(max(feature)))
      if min(feature) in thre_set:
        thre_set.remove(min(feature))
      pre_H = 0
      for thre in thre_set:
        lower = [y[s] for s in range(len(feature)) if feature[s] < thre]
        highter = [y[s] for s in range(len(feature)) if feature[s] > thre]
        H_l = 0
        for l in set(lower):
          H_l += -(lower.count(l) / len(lower))*math.log(lower.count(l) / len(lower))
        H_h = 0
        for h in set(highter):
          H_h += -(highter.count(h) / len(highter))*math.log(highter.count(h) / len(highter))
        temp_condi_H = len(lower)/n_y *H_l+ len(highter)/n_y * H_h
        condi_H = orig_H - temp_condi_H
        pre_H = max(pre_H,condi_H)
      condi_H_list.append(pre_H)

    self.IG = condi_H_list


  def getIG(self):
    return self.IG

if __name__ == "__main__":


  X = [[1, 0, 0, 1],
     [0, 1, 1, 1],
     [0, 0, 1, 0]]
  y = [0, 0, 1]


  print(IG(X,y).getIG())

输出结果为:

[0.17441604792151594, 0.17441604792151594, 0.17441604792151594, 0.6365141682948128]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
比较详细Python正则表达式操作指南(re使用)
Sep 06 Python
使用python开发vim插件及心得分享
Nov 04 Python
彻底搞懂Python字符编码
Jan 23 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
Django密码系统实现过程详解
Jul 19 Python
解决Python中回文数和质数的问题
Nov 24 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python如何读写字节数据
Aug 05 Python
套娃式文件夹如何通过Python批量处理
Aug 23 Python
Django URL参数Template反向解析
Nov 24 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
python实现连续图文识别
Dec 18 #Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 #Python
Python列表list排列组合操作示例
Dec 18 #Python
python实现二维插值的三维显示
Dec 17 #Python
Python实现分段线性插值
Dec 17 #Python
Python 获取主机ip与hostname的方法
Dec 17 #Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 #Python
You might like
一个PHP针对数字的加密解密类
2014/03/20 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
python使用pymysql实现操作mysql
2016/09/13 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python中Apriori算法实现讲解
2017/12/10 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python微信撤回监测代码
2019/04/29 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
数学专业毕业生自荐信
2013/11/10 职场文书
销售总经理岗位职责
2014/03/15 职场文书
学生会主席竞聘书
2014/03/31 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
质量负责人岗位职责
2015/02/15 职场文书