Giter Site home page Giter Site logo

gaybro8777 / mitoolbox Goto Github PK

View Code? Open in Web Editor NEW

This project forked from craigacp/mitoolbox

0.0 0.0 0.0 151 KB

Mutual Information functions for C and MATLAB

License: BSD 3-Clause "New" or "Revised" License

Makefile 1.16% C++ 17.51% C 69.22% MATLAB 11.84% Mercury 0.27%

mitoolbox's Introduction

MIToolbox

v3.0.1 for C/C++ and MATLAB/Octave

MIToolbox contains a set of functions to calculate information theoretic quantities from data, such as the entropy and mutual information. The toolbox contains implementations of the most popular Shannon entropies, and also the lesser known Renyi entropy. The toolbox also provides implementations of the weighted entropy and weighted mutual information from "Information Theory with Application", S. Guiasu (1977). The toolbox only supports discrete distributions, as opposed to continuous. All real-valued numbers will be processed by x = floor(x).

These functions are targeted for use with feature selection algorithms rather than communication channels and so expect all the data to be available before execution and sample their own probability distributions from the data.

All functions expect the inputs to be vectors or matrices of doubles.

Functions contained:

  • Entropy
  • Conditional Entropy
  • Mutual Information
  • Conditional Mutual Information
  • generating a joint variable
  • generating a probability distribution from a discrete random variable
  • Renyi's Entropy
  • Renyi's Mutual Information
  • Weighted Entropy
  • Weighted Mutual Information
  • Weighted Conditional Mutual Information

Note: all functions are calculated in log base 2, so return units of "bits".

MIToolbox works on discrete inputs, and all continuous values must be discretised before use with MIToolbox. Real-valued inputs will be discretised with x = floor(x) to ensure compatibility. MIToolbox produces unreliable results when used with continuous inputs, runs slowly and uses much more memory than usual. The discrete inputs should have small cardinality, MIToolbox will treat values {1,10,100} the same way it treats {1,2,3} and the latter will be both faster and use less memory. This limitation is due to the difficulties in estimating information theoretic functions of continuous variables.

======

Examples:

>> y = [1 1 1 0 0]';
>> x = [1 0 1 1 0]';
>> mi(x,y)       %% mutual information I(X;Y)
ans =
    0.0200
>> h(x)          %% entropy H(X)
ans =
    0.9710
>> condh(x,y)    %% conditional entropy H(X|Y)
ans =
    0.9510
>> h( [x,y] )    %% joint entropy H(X,Y)
ans =
    1.9219
>> joint([x,y])  %% joint random variable XY
ans =
     1
     2
     1
     3
     4

======

All code is licensed under the 3-clause BSD license.

Compilation instructions:

  • MATLAB/OCTAVE
    • run CompileMIToolbox.m from the matlab directory.
  • Linux C shared library
    • run make x86 or make x64 for 32-bit or 64-bit versions respectively.
    • run sudo make install to install MIToolbox into /usr/local/lib and /usr/local/include
  • Windows C dll

Update History

  • 08/02/2017 - v3.0.1 - Bug fix to ensure ANSI C compatibility.
  • 07/01/2017 - v3.0.0 - Refactored internals to expose integer information theoretic calculations.
  • 10/01/2016 - v2.1.2 - Relicense from LGPL to BSD. Added checks to ensure input MATLAB types are doubles.
  • 02/02/2015 - v2.1.1 - Fixed up the Makefile so it installs the headers too.
  • 22/02/2014 - v2.1 - Fixed a couple of bugs related to memory handling. Added a make install for compatibility with PyFeast.
  • 30/07/2011 - v2.00 - Added implementations of the weighted entropy and weighted mutual information. More cleanup of Mex entry point to further check the inputs.
  • 08/11/2011 - v1.03 - Minor documentation changes to accompany the JMLR publication.
  • 15/10/2010 - v1.02 - Fixed bug where MIToolbox would cause a segmentation fault if a x by 0 empty matrix was passed in. Now prints an error message and returns gracefully.
  • 02/09/2010 - v1.01 - Fixed a bug in CMIM.m where the last feature would not be selected first if it had the highest MI.
  • 07/07/2010 - v1.00 - Initial Release.

mitoolbox's People

Contributors

craigacp avatar evgenidubov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.