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中处理日期和时间的基本知识点整理汇总
May 22 Python
Python如何快速实现分布式任务
Jul 06 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Python反射用法实例简析
Dec 22 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
对python多线程与global变量详解
Nov 09 Python
pandas 如何分割字符的实现方法
Jul 29 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
Python常用数据类型之间的转换总结
Sep 06 Python
python 生成器需注意的小问题
Sep 29 Python
python实现文件分片上传的接口自动化
Nov 19 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
javascript工具库代码
2012/03/29 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
python操作xml文件详细介绍
2014/06/09 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
使用python实现knn算法
2017/12/20 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
python django生成迁移文件的实例
2019/08/31 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Python编写打字训练小程序
2019/09/26 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
商务英语专业自荐信
2013/10/14 职场文书
会计学专业自荐信
2014/06/25 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技