[英]perceptron classifying
我有一個包含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-1021550_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-1614537_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-0834263_utf.txt','13871015-txt-1264594_utf .txt”,“ 13880304-txt-1345179_utf.txt”,“ 138 90531-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-1542795_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-1312303_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-1353520_utf.txt','13880621-txt-1401062_utf.txt','13890318-txt-1553380_utf.txt','13890909-txt-1665470_utf.txt ']
好的,這是所有分類任務的總規則(簡而言之):要對任何內容(文本,圖像,聲音...)進行分類,您首先需要從數據點(對於您的情況是每個文本文件)中提取特征。 對於您的情況,功能就是您提到的1000個單詞。 因此,每個訓練案例的每個特征向量的長度為1000。然后將這些示例輸入所需的模型(任何類型的神經網絡或任何其他模型),然后獲取每個類的輸出。 在這里,您必須具有成本函數,該函數確定每個輸入示例(您的情況下為每個文本文件)的模型輸出與真實標簽的偏離量,並使關於模型參數的成本函數最小化。
您想要的模型有很多實現。 一旦構建了特征向量,就可以使用那些公開可用的實現。
用Perceptron學習規則訓練的線性神經網絡 : http : //scikit-learn.org/stable/modules/generation/sklearn.linear_model.Perceptron.html
使用其他激活功能並經過梯度下降訓練的神經網絡 : http : //scikit-learn.org/dev/modules/neural_networks_supervised.html
我建議您使用經過梯度descnet訓練的神經網絡,而不是Perceptrons神經網絡。 感知器只能學習線性可分離的分類器。 他們的假設是您的輸入數據是線性可分離的,如下所示:
該圖中的點是數據點。 但是,在實際情況下,大多數數據點不是線性可分離的。 只是為了給您一個主意, 運動文本文檔可能與社交文檔共享許多單詞。 因此,最好使用非線性分類器,例如神經網絡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.