神经网络分类问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络分类问题相关的知识,希望对你有一定的参考价值。

我事 数学系的,做神经网络分类问题的论文,老师说DNA分类的例子太简单了,,急求例子..
给点具体的例子,最好是有范文的

神经网络是新技术领域中的一个时尚词汇。很多人听过这个词,但很少人真正明白它是什么。本文的目的是介绍所有关于神经网络的基本包括它的功能、一般结构、相关术语、类型及其应用。

“神经网络”这个词实际是来自于生物学,而我们所指的神经网络正确的名称应该是“人工神经网络(ANNs)”。在本文,我会同时使用这两个互换的术语。

一个真正的神经网络是由数个至数十亿个被称为神经元的细胞(组成我们大脑的微小细胞)所组成,它们以不同方式连接而型成网络。人工神经网络就是尝试模拟这种生物学上的体系结构及其操作。在这里有一个难题:我们对生物学上的神经网络知道的不多!因此,不同类型之间的神经网络体系结构有很大的不同,我们所知道的只是神经元基本的结构。

The neuron
--------------------------------------------------------------------------------

虽然已经确认在我们的大脑中有大约50至500种不同的神经元,但它们大部份都是基于基本神经元的特别细胞。基本神经元包含有synapses、soma、axon及dendrites。Synapses负责神经元之间的连接,它们不是直接物理上连接的,而是它们之间有一个很小的空隙允许电子讯号从一个神经元跳到另一个神经元。然后这些电子讯号会交给soma处理及以其内部电子讯号将处理结果传递给axon。而axon会将这些讯号分发给dendrites。最后,dendrites带着这些讯号再交给其它的synapses,再继续下一个循环。

如同生物学上的基本神经元,人工的神经网络也有基本的神经元。每个神经元有特定数量的输入,也会为每个神经元设定权重(weight)。权重是对所输入的资料的重要性的一个指标。然后,神经元会计算出权重合计值(net value),而权重合计值就是将所有输入乘以它们的权重的合计。每个神经元都有它们各自的临界值(threshold),而当权重合计值大于临界值时,神经元会输出1。相反,则输出0。最后,输出会被传送给与该神经元连接的其它神经元继续剩余的计算。

Learning
--------------------------------------------------------------------------------

正如上述所写,问题的核心是权重及临界值是该如何设定的呢?世界上有很多不同的训练方式,就如网络类型一样多。但有些比较出名的包括back-propagation, delta rule及Kohonen训练模式。

由于结构体系的不同,训练的规则也不相同,但大部份的规则可以被分为二大类别 - 监管的及非监管的。监管方式的训练规则需要“教师”告诉他们特定的输入应该作出怎样的输出。然后训练规则会调整所有需要的权重值(这是网络中是非常复杂的),而整个过程会重头开始直至数据可以被网络正确的分析出来。监管方式的训练模式包括有back-propagation及delta rule。非监管方式的规则无需教师,因为他们所产生的输出会被进一步评估。

Architecture
--------------------------------------------------------------------------------

在神经网络中,遵守明确的规则一词是最“模糊不清”的。因为有太多不同种类的网络,由简单的布尔网络(Perceptrons),至复杂的自我调整网络(Kohonen),至热动态性网络模型(Boltzmann machines)!而这些,都遵守一个网络体系结构的标准。

一个网络包括有多个神经元“层”,输入层、隐蔽层及输出层。输入层负责接收输入及分发到隐蔽层(因为用户看不见这些层,所以见做隐蔽层)。这些隐蔽层负责所需的计算及输出结果给输出层,而用户则可以看到最终结果。现在,为免混淆,不会在这里更深入的探讨体系结构这一话题。对于不同神经网络的更多详细资料可以看Generation5 essays

尽管我们讨论过神经元、训练及体系结构,但我们还不清楚神经网络实际做些什么。

The Function of ANNs
--------------------------------------------------------------------------------

神经网络被设计为与图案一起工作 - 它们可以被分为分类式或联想式。分类式网络可以接受一组数,然后将其分类。例如ONR程序接受一个数字的影象而输出这个数字。或者PPDA32程序接受一个坐标而将它分类成A类或B类(类别是由所提供的训练决定的)。更多实际用途可以看Applications in the Military中的军事雷达,该雷达可以分别出车辆或树。

联想模式接受一组数而输出另一组。例如HIR程序接受一个‘脏’图像而输出一个它所学过而最接近的一个图像。联想模式更可应用于复杂的应用程序,如签名、面部、指纹识别等。

The Ups and Downs of Neural Networks
--------------------------------------------------------------------------------

神经网络在这个领域中有很多优点,使得它越来越流行。它在类型分类/识别方面非常出色。神经网络可以处理例外及不正常的输入数据,这对于很多系统都很重要(例如雷达及声波定位系统)。很多神经网络都是模仿生物神经网络的,即是他们仿照大脑的运作方式工作。神经网络也得助于神经系统科学的发展,使它可以像人类一样准确地辨别物件而有电脑的速度!前途是光明的,但现在...

是的,神经网络也有些不好的地方。这通常都是因为缺乏足够强大的硬件。神经网络的力量源自于以并行方式处理资讯,即是同时处理多项数据。因此,要一个串行的机器模拟并行处理是非常耗时的。

神经网络的另一个问题是对某一个问题构建网络所定义的条件不足 - 有太多因素需要考虑:训练的算法、体系结构、每层的神经元个数、有多少层、数据的表现等,还有其它更多因素。因此,随着时间越来越重要,大部份公司不可能负担重复的开发神经网络去有效地解决问题。

Conclusion
--------------------------------------------------------------------------------

希望您可以通过本文对神经网络有基本的认识。Generation5现在有很多关于神经网络的资料可以查阅,包括文章及程序。我们有Hopfield、perceptrons(2个)网络的例子,及一些back-propagation个案研究。

Glossary
--------------------------------------------------------------------------------
NN 神经网络,Neural Network
ANNs 人工神经网络,Artificial Neural Networks
neurons 神经元
synapses 神经键
self-organizing networks 自我调整网络
networks modelling thermodynamic properties 热动态性网络模型
参考技术A 模式分类
文字识别怎么样?印刷体汉字识别、版面分析、手写汉字识别
人脸识别、指纹识别中的模式分类
数据挖掘中的模式分类

如何处理人工神经网络中的多个分类列?

【中文标题】如何处理人工神经网络中的多个分类列?【英文标题】:How to process multiple categorical columns in an artificial neural network? 【发布时间】:2018-12-02 22:26:57 【问题描述】:

目前,我在以下dataset 工作,其中我有多个具有不同值的列,我想将每一行分类到正确的类别 - 在这种情况下,正确的工程师。

目标:根据类别、问题类别、受影响设备、创建原因、问题状态和优先级,确定工单属于哪个工程师。这是一个分类问题,我正在使用人工神经网络来解决这个问题。

Structure of the dataset

Category       |  Problem Category   | Affected devices      | Reason for creating    | Issue status | Priority | Security Engineer 

Cybersecurity     Penetration breach   Personal user devices   Hourly analysis          Transferred          3         K. Schulz
Cybersecurity     Lack of Cert         Company main devices    Hourly analysis          Closed               2         U. Frank
IoT               Malware installed    Personal user devices   Hourly analysis          Transferred          2         L. Tolso
....
....


# Matrix of features
X = dataset.iloc[:,:-1].values

# dependent variable: engineers
y = dataset.iloc[:,-1:].values

# Encode the categorical data to numerical data
# The priority column will not be encoded because it is already in numerical data, i.e., 0,1,2,3.

labelEncoder_X_category            = LabelEncoder()
labelEncoder_X_problem_category    = LabelEncoder()
labelEncoder_X_affected_devices    = LabelEncoder()
labelEncoder_X_reason_for_creating = LabelEncoder()
labelEncoder_X_issue_status        = LabelEncoder()

X[:, 0] = labelEncoder_X_category.fit_transform(X[:, 0])
X[:, 1] = labelEncoder_X_problem_category.fit_transform(X[:, 1])
X[:, 2] = labelEncoder_X_affected_devices.fit_transform(X[:, 2])
X[:, 3] = labelEncoder_X_reason_for_creating.fit_transform(X[:, 3])
X[:, 4] = labelEncoder_X_issue_status.fit_transform(X[:, 4])

# Create dummy variable
# Column zero (Category) will be used to split the encoded data of this column into multiple columns with many 0s and 1s
oneHotEncoder_category         = OneHotEncoder(categorical_features = [0])

# Once the column zero has been separated into columns of 0s and 1s, attach it to the current matrix of features
X  = oneHotEncoder_category.fit_transform(X).toarray()

print(X)

# Split the data into training and test set
# Not yet implemented because I want to solve my questions

# Feature scaling       
# Not yet implemented because I want to solve my questions

问题

    除优先级列外,所有列都已编码为数值,只有第 0 列(类别)被拆分为几列 0 和 1,但我是否还需要将其他列拆分为 0 和 1还是只有 1 列就足够了?

    我担心我需要避免缺乏多重共线性问题,也就是说,我不能在我的模型中包含所有虚拟变量,但是如果我将其余列编码为 0,我该如何应用相同的原则和 1s?

我尝试尽可能详细地说明我遇到此问题的情况,希望没有让任何人感到困惑,但如果我这样做了,请随时纠正我或问我更多问题,我将非常乐意为您提供帮助.

【问题讨论】:

【参考方案1】:

encoding categorical data 有不同的方法,但最常见的一种是 one-hot 编码。在你的情况下:

    是的,您必须对所有分类列进行一次热编码,以便每一列都成为向量 [0,0,...,1,0,0,...]。现在您可以将所有列向量连接成一个大的向量作为网络的输入。输出将是工程师的分类。您可能还想对优先级进行一次热编码,因为可能存在可以被视为类别的有限离散值。

    我不确定您为什么担心多重共线性。如果你在做回归,这通常是一个问题,在你的分类情况下,神经网络基本上会选择状态组合(因为你每列都是一个热点)并学会忽略其他状态。对于任何学习算法都是如此,如果工程师 A 总是响应某个类别,那么这足以对数据进行分类。

查看您的数据,我会考虑使用decision tree。叶节点将是工程师,并且您从最显着的特征中分支出来。优点是您可以确切地知道它学到了什么并将其可视化。更好的是,如果有细微的变化(新类别、新工程师等),您可以手动修改树,直到获得新的训练数据。

【讨论】:

非常感谢您的回复,老实说,我很感谢您的建议,因为我错过了重要的关键事实,例如多重共线性不适用于这种情况,因为我的问题与分类而不是回归有关,而且,我认为优先级的数据不应该被编码,但我现在明白你的意思了。感谢您提供宝贵的反馈! :D

以上是关于神经网络分类问题的主要内容,如果未能解决你的问题,请参考以下文章

为序数神经网络编码我的多类分类问题

结合回归和分类的多输出神经网络

用于图像分类的图神经网络

神经网络中的多分类问题

如何使用 keras 实现多标签分类神经网络

如何处理人工神经网络中的多个分类列?