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批量提交沙箱问题实例
Oct 08 Python
Python极简代码实现杨辉三角示例代码
Nov 15 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
Python列表与元组的异同详解
Jul 02 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
Python log模块logging记录打印用法解析
Jan 20 Python
python add_argument()用法解析
Jan 29 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
python实现Thrift服务端的方法
Apr 20 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
咖啡常见的种类
2021/03/03 新手入门
在JavaScript中调用php程序
2009/03/09 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
JS实现li标签的删除
2019/04/12 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
OpenCV 模板匹配
2019/07/10 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
运动会方阵解说词
2014/02/12 职场文书
公益广告宣传方案
2014/02/28 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
民间个人借款协议书
2014/09/30 职场文书
个人委托函范文
2015/01/29 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
货款欠条范本
2015/07/03 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技