基于汉字字频特征实现99.99%准确率的新闻文本分类器(五)

原创 2016年05月31日 14:17:46


基于汉字字频特征实现99.99%准确率的新闻文本分类器(一)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(二)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(三)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(四)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(五)

基于汉字字频特征实现99.99%准确率的新闻文本分类器(六)

回顾

上 一节中,通过走读源代码,分析了常用汉字的字频,及每个新闻文本的特征向量的归一化。SVM已经可以达到比常用的词频特征向量更好的分类成绩。本节,将分析五层神经网络的源代码。

人工神经网络

关于人工神经网络的定义等相关知识,请参阅相关资料。

源代码

在五层神经网络分类器的源代码项目中,Program.cs中的代码主要做简单的特征数据加载工作。在加载完毕后,调用神经网络进行分类工作。

所以这里主要分析NN.cs的代码。NN.cs包含三个类,一个是NN类,表示神经网络的加载器。它会从数据流中加载输出层。OutLevel类会从数据流中加载输出层权值矩阵,并采用序列化的方式,加载后续的其它MidLevel权值。

    public class NN{...}
    public class OutLevel{...}
    public class MidLevel{...}


在它们的Run函数中,我们可以到

        internal void Run(double[] inputs)
        {
            if (nextLevel != null)
            {
                nextLevel.Run(inputs);
                int thiscount = o.Length;
                int nextcount = nextLevel.o.Length;
                int id = 0;
                for (int i = 0; i < thiscount; i++)
                {
                    double sum = 0;
                    for (int j = 0; j < nextcount; j++)
                        sum += nextLevel.o[j] * w[id++];
                    sum += thta[i];
                    o[i] = 1 / (1 + Math.Exp(-sum));
                }
            }
            else
                o = inputs;
        }

这里先对下层的输出o和本层的w进行乘积求和,然后采用神经元的标准非线性作用函数Sigmoid函数计算本层的神经元输出o。

通过递归的加载,即可加载完整五层神经网络权值数据。例如,加载的首层的权值w矩阵有(部分值):

 -0.036 -0.203 0.025 0.035 -0.017 0.011 -0.295 -0.010 -0.018 -0.117 -0.021
 0.134 0.110 0.302 0.154 -0.646 0.025 0.081 0.047 -0.098 0.032 0.129 0.021
 -0.200 0.097 0.138 0.094 -0.102 -0.206 0.083 -0.126 0.103 -0.077 0.098 -0

这些权值,即是神经元之间传递激活值的依据。与下图所示的类似:

对于神经网络来说,二分类的单个神经元输出层运算输出的是一个0-1的实数。它(这个实数)描述了一个输入向量是否是一个分类(0 否,1是,中间值 一定比率的是否)。

                if (Math.Abs(res - wanted) > 0.4)

所以,在判断一个文本特征向量是否是军事类的新闻的时候,我们采用区间法,即,输出值在0-0.4的认为不是军事类新闻,输出值在0.6-1的,认为是军事类新闻。0.4-0.6的不置可否。例如甲乙两个新闻,甲的输出0.9999,乙的输出0.6123,很明显神经网络认为甲是军事类的新闻的可能性比乙要高的多,甚至有些量子理论中的这个新闻是某种概率的(61.23%)属于某个分类的意思。神经网络的这种0-1连续输出的方式,有一种天生的模糊逻辑的意味。

我无法用数学语言描述为什么五层神经网络的泛化能力为什么比三层神经网络强。

这里是临近输入层的权值向量(就是吐舌头那一层,取前20个),它们蕴藏了一个秘密!

-0.326 0.153 -0.086 -0.526 -0.642 -0.692 0.034 -0.295 -0.182 0.027 -0.489 -0.069 -0.226 -0.293 0.089 -0.335 -0.129 -0.137 0.072 0.102

下节预告

下节,我会为大家揭开一个秘密,一个关于神经网络的神奇用法的秘密。

基于汉字字频特征实现99.99%准确率的新闻文本分类器(六)

 

版权声明:本文为博主原创文章,转载请注明原始链接

相关文章推荐

基于汉字字频特征实现99.99%准确率的新闻文本分类器(三)

五层人工神经网络对汉字字频特征的分类效果令人...

基于汉字字频特征实现99.99%准确率的新闻文本分类器(一)

基于中文是表义文字而不是表音文字,我认为直接采用汉字字频作为文本的特征,比词频更能精确描述文本的内容。

基于汉字字频特征实现99.99%准确率的新闻文本分类器(四)

PreData - 文本汉字字频特征向量提取项目代码解读

新闻推荐系统之朴素贝叶斯分类器文本分类

因为最近需要为自己团队的项目开发新闻推荐的功能模块,在推荐算法这一块涉及到了基于内容的推荐算法(Content-Based Recommendation),因此用到了朴素贝叶斯来对抓取的新闻进行分类,...

【机器学习实战】网格搜索--贝叶斯新闻文本分类器调优

#对文本分类的朴素贝叶斯模型的超参数组合进行网格搜索 #从sklearn.datasets中导入20类新闻文本抓取器 from sklearn.datasets import fetch_20news...

数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(下)

本文接 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文档分类器的JAVA实现(上)  (update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsg...

数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上)

(update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ )本文主...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)