数学建模社区-数学中国

标题: 机器学习算法——信息熵 [打印本页]

作者: 重光兰衣    时间: 2018-11-2 08:53
标题: 机器学习算法——信息熵
机器学习算法——信息熵信息熵(Entropy)/ B  s! o/ O: Z/ {2 N( u7 X1 }
        信息是个很抽象的概念。我们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本书中到底有多少信息量。直到 1948 年,香农(C. E. Shannon)提出了“信息熵”(shāng) 的概念,才解决了对信息的量化度量问题。熵的概念发展成为信息论、数据压缩等学科的基础,在很多科学研究的领域尤其是计算机科学中有着广泛的应用。6 n9 V8 N& n; X+ \2 R$ n) K0 h; P
        实际上,一条信息的信息量大小和它的不确定性或存在概率有直接的关系。比如说,我们要搞清楚一件非常非常不确定的事,或是我们一无所知的事情,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。因此可以认为信息熵是系统有序化程度的一个度量。 Shannon 借鉴了热力学的概念,把信息与其存在概率关联起来并称之为“信息熵”,并给出了计算信息熵的数学表达式:  H = - ∑  Pi * log2 Pi
! R- R5 N+ P1 t8 h
5 G# W, z9 ^( O( z# T假设有一个字符串要求它的信息熵,其中Pi是字符i出现的概率(该字符出现次数/所有字符数),然后将所有的Pi乘上取对数后的值log2 Pi后累加,最后取负,得到字符串的信息熵。
' j* |: c+ j# B; c& F3 ~本题要求计算给定字符串按照每个字符统计的信息熵。
% V0 }6 ]/ b1 v! T$ T; W输入:一个字符串,请忽略所有非字母的字符(即只关注a-z, A-Z),且不区分字母的大小写。
3 |9 n2 j9 @  Q$ @提示:可以用StdIn.readAll()读入字符串的所有内容
, a6 v; }4 A! W5 u) F输出:对应字符串的熵值,输出请用格式化输出("%4.2f\n")
6 R. Q( o/ l1 O" j) a2 o样例输入:To be or not To be,↵
3 c& p3 q9 E/ E9 {8 m' U$ |that is the question↵* j( x/ j& b: P8 H: |' j# Y/ s& W
样例输出:* Q& R! U9 t  d: @! p9 f/ C
捕获.PNG
: H8 V7 A' _$ n9 l; L* y  _ 捕获.PNG / U1 l0 i7 U0 s

" V- p3 O* r4 ^; `; W6 m7 i# M- g. E* F+ p% H4 L( s, ^! `3 P! j

+ K$ H6 s; B: o* N) L" \: D. H4 f. x
. U5 O% o6 F5 ^3 z; p6 Z
  d4 B' q6 \; P8 _
, B3 q/ y: y, ^  H/ ~1 C+ `1 S  R: l. ^0 \- l





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5