python - 感知器分类

标签 python machine-learning nlp neural-network

我有一个包含 7 个子文件夹的文件夹,每个子文件夹包含 8 个文件。一般来说,我有 56 个火车组文件。对于测试集,我有一个包含 7 个子文件夹的文件夹,每个子文件夹包含 2 个文件(测试集通常有 14 个文件)。我有另一个文件,其中包含火车集中 1000 个最常见的单词。我必须检查这 1000 个单词是否在训练集中。如果它们存在,它应该返回 +1,否则它应该返回 -1 以生成一个向量。然后我必须使用双极感知器(神经网络)对文本进行分类。阈值是 0.1,学习率为 0.5。分配权重后的部分效果不佳。如何更改代码?

import os
file="c:/python34/1000CommonWords.txt"
folder_path="c:/python34/train"
def vector (folder_path, file):
    t=[]   
    vector=[]
    vector2=[]
    m=[]

    for folder in sorted(os.listdir(folder_path)):
        folder_path1 = os.path.join(folder_path, folder)
        for folder1 in sorted(os.listdir(folder_path1)):
            file=os.path.join(folder_path1, folder1)
            tex = open(file,encoding="utf-8") 
            tex=tex.read().split()
            t=tex+t






        with open (file, encoding="utf-8") as f1:
            f1=f1.read().split()


            for c in t:      # to make the [1, -1] vector
               for i in c:
                    for j in f1:
                        if j in i:
                            m.append (+1)
                        else:
                            m.append (-1)
                    vector.append(m)
                    vector2.append(vector)
                    #return vector2

                    w=[[0 for row in range(len(vector2[0][0] ))] for clmn in range(7)]   # weights
                    b=[0 for wb in range(7)]   # bias
                    l=0
                    while l<=1000:
                        w_old=w[:]
                        b_old=b[:]
                        for Class in vector2:
                            for text in Class:
                                node=0
                                while node<7:
                                    i=0
                                    y_in=0
                                    while i<len(text):
                                        y_in= text[i]*w[node][i]
                                        i+=1
                                        y_in=b[node]+y_in
                                        if y_in<=-0.1:  # activatin function
                                            y=-1
                                        elif (y_in <=0.1 and y_in>=-0.1):
                                            y=0
                                        else:
                                            y=1

                                        if node==vector2.index(Class):
                                            target=1  # assign target
                                        else:
                                            target=-1

                                        if target!=y:
                                            for j in range(0,len(w[0])): # update weights
                                                w[node][j]=w[nod][j]+0.5*text[j]*target
                                                b[node]=b[node]+0.5*target
                                              #  print(len(w)) 
                                               # print(len(w[0]))
                                                node+=1
                                                l+=1
                                                print (w)
                                                print(b)

文件夹名称:(语言为波斯语)

每个文件夹包含以下文件:

['13810320-txt-0132830_utf.txt', '13810821-txt-0172902_utf.txt', '13830627-txt-0431835_utf.txt', '13850502-txt-0751465_utf.txt', '13850506- txt-0754145_utf .txt', '13850723-txt-0802407_utf.txt', '13860630-txt-1002033_utf.txt', '13870730-txt-1219770_utf.txt'] ['13860431-txt-0963964_utf.txt','13860616-txt-0992811_utf.txt','13860625-txt-0997674_utf.txt','13860722-txt-1013944_utf.txt','13860802-txt-1 021550_utf.txt' 、'13870329-txt-1149735_utf.txt'、'13870903-txt-1240455_utf.txt'、'13871001-txt-1256894_utf.txt'] ['13860321-txt-0940314_utf.txt','13860930-txt-1055987_utf.txt','13870504-txt-1169324_utf.txt','13880223-txt-1337283_utf.txt','13890626-txt-1 614537_utf.txt' 、'13891005-txt-1681151_utf.txt'、'13891025-txt-1694816_utf.txt'、'13891224-txt-1732745_utf.txt'] ['13821109-txt-0342352_utf.txt','13840501-txt-0558076_utf.txt','13840725-txt-0599073_utf.txt','13850728-txt-0809843_utf.txt','13850910-txt-0 834263_utf.txt' 、'13871015-txt-1264594_utf.txt'、'13880304-txt-1345179_utf.txt'、'13890531-txt-1596470_utf.txt'] ['13850816-txt-0807093_utf.txt','13850903-txt-0830601_utf.txt','13851012-txt-0853818_utf.txt','13870605-txt-1185666_utf.txt','13890301-txt-1 542795_utf.txt' 、'13890626-txt-1614287_utf.txt'、'13890716-txt-1628932_utf.txt'、'13900115-txt-1740412_utf.txt'] ['13870521-txt-1177039_utf.txt','13870706-txt-1196885_utf.txt','13870911-txt-1220118_utf.txt','13871029-txt-1273519_utf.txt','13880118-txt-1 312303_utf.txt' 、'13880303-txt-1202027_utf.txt'、'13880330-txt-1132374_utf.txt'、'13880406-txt-1360964_utf.txt'] ['13840803-txt-0602704_utf.txt','13841026-txt-0651073_utf.txt','13880123-txt-1315587_utf.txt','13880205-txt-1324336_utf.txt','13880319-txt-1 353520_utf.txt' , '13880621-txt-1401062_utf.txt', '13890318-txt-1553380_utf.txt', '13890909-txt-1665470_utf.txt']

最佳答案

好吧,这是任何分类任务的一般规则(简而言之):要对任何内容(文本、图像、声音...)进行分类,您首先需要从数据点(在您的情况下是每个文本文件)中提取特征。对于您的情况,特征是您提到的 1000 个单词。因此,每个训练案例的每个特征向量的长度为 1000。然后,您将这些示例提供给所需的模型(任何类型的神经网络或任何其他模型),然后获得每个类的输出。在这里,您必须有一个成本函数,它确定模型的输出与每个输入示例(您的案例中的每个文本文件)的真实标签的偏差程度,并最小化相对于模型参数的成本函数。

有很多实现您想要的模型的方法。一旦构建了特征向量,您就可以使用这些公开可用的实现。

使用感知器学习规则训练的线性神经网络:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html

使用其他激活函数并通过梯度下降进行训练的神经网络:http://scikit-learn.org/dev/modules/neural_networks_supervised.html

我建议您使用使用梯度下降网络训练的神经网络类型,而不是感知器神经网络。感知器只能学习线性可分离的分类器。他们的假设是您的输入数据是线性可分离的,如下所示:

https://upload.wikimedia.org/wikipedia/commons/2/20/Svm_separating_hyperplanes.png

该图中的点是数据点。然而,在现实场景中,大多数数据点并不是线性可分的。仅供您引用,体育文本文档可能与社交文档共享很多单词。因此,您最好使用非线性分类器,例如神经网络。

关于python - 感知器分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500723/

相关文章:

python - pyparsing nestedExpr 和嵌套括号

python - 如何通过tree.plot_tree设置 TreeView 中的列名?

java - 任何用于匹配名称的消歧工具/API?

python - 计算字符串中尾随换行符的数量

java - Java 中的意大利语词干提取库

python - python 3.4中的tracemalloc

python - 小部件在 GridLayout 中的位置

python - 所有子集的集合

python - 请求例如 : Recurrent neural network for predicting next value in a sequence

java - 命名实体识别IOB注释转换