我有一个包含7个子文件夹的文件夹,每个子文件夹包含8个文件。一般来说,我有56个文件用于训练集。对于测试集,我有一个包含7个子文件夹的文件夹,每个子文件夹包含2个文件(测试集通常有14个文件)。我有另一个文件,其中包含1000个最常见的列车集单词。我必须检查这1000个单词是否在训练集中。如果它们存在,它应该返回+1,否则它应该返回-1以生成vector.Then。我必须使用双极感知器(神经网络)对文本进行分类。阈值是,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‘’13860321-txt-0940314_fut.txt‘,'13860930-txt-1055987_utf.txt',’'13870504-txt-1169324_utf.txt','13880223-txt-1337283_utf.txt','13890626-txt-1614537_utf.txt','13891005-txt-1681151_utf.txt','13891025-txt-1694816_utf.txt','13891224-txt-1732745_utf.txt‘,'13850903-txt-0830601_utf.txt','13851012-txt-0853818_utf.txt','13870605-txt-1185666_utf.txt',’'13890301-txt-1542795_utf.txt','13890626-txt-1614287_utf.txt','13890716-txt-1628932_utf.txt','13900115-txt-1740412_utf.txt‘'13840803-txt-0602704_utf.txt','13841026-txt-0651073_utf.txt','13880123-txt-1315587_utf.txt','13880205-txt-1324336_utf.txt','13880319-txt-1353520_utf.txt','13880621-txt-1401062_utf.txt',’'13890318-txt-1553380_utf.txt','13890909-txt-1665470_utf.txt‘
发布于 2015-12-29 06:10:31
好的,这是任何分类任务的一般规则(简而言之):对任何东西(文本,图像,声音...)进行分类您首先需要从数据点(在您的示例中是每个文本文件)中提取特征。对于您的情况,功能是您提到的1000个单词。因此,每个训练案例的每个特征向量的长度为1000。然后,将这些示例提供给所需的模型(任何类型的神经网络或任何其他模型),然后获得每个类的输出。在这里,你必须有一个成本函数来确定模型的输出与每个输入示例(在你的例子中是每个文本文件)的真实标签有多大的偏差,并最小化关于模型参数的成本函数。
对于您想要的模型,有相当多的实现。一旦你构建了你的特征向量,你就可以使用那些公开可用的实现。
使用感知器学习规则训练的线性神经网络:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html
使用其他激活函数并使用梯度下降训练的神经网络:http://scikit-learn.org/dev/modules/neural_networks_supervised.html
我建议您使用用梯度下降网训练的神经网络类型,而不是感知器神经网络。感知器只能学习线性可分离的分类器。他们的假设是,您的输入数据是线性可分的,如下所示:

该图中的点是数据点。然而,在现实世界中,大多数数据点都不是线性可分的。仅给您一个概念,sports文本文档可能与社交文档共享许多单词。所以你最好使用非线性分类器,比如神经网络。
https://stackoverflow.com/questions/34500723
复制相似问题