liblinear ist eine Gelegenheitslernbibliothek zum linearen Trennen von Daten mit 1 Million Stellen Instanz und Features. https://www.csie.ntu.edu.tw/~cjlin/liblinear/ Als Feature unterscheidet es sich von anderen darin, dass es eine große Anzahl von Elementen schnell verarbeiten kann.
Wie auch immer, legen Sie es auf den Desktop und drücken Sie es. Geben Sie zunächst an, was Sie importieren möchten. Anstatt ein Terminal (oder cmd) zu öffnen und den Befehl ipython sofort einzugeben, wechseln Sie in das Verzeichnis (Ordner), in dem Sie arbeiten möchten, und starten Sie ipython.
import sys
sys.path.append('/Users/xxxx/Desktop/liblinear-2.1/python')
from liblinearutil import *
from liblinear import *
Die verwendeten Daten sind die folgenden Nachrichten20 https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html Die Form der liblinearen Daten ist etwas Besonderes. Wenn Sie es tatsächlich verwenden, müssen Sie es in diese Form bringen
y, x = svm_read_problem('news20.txt')
Zug → vorhersagen
In [20]: len(y)
Out[20]: 15935
#Da es 15935 Daten gibt, können bis zu 5000 Daten als Lehrerdaten trainiert werden.
m = train(y[:5000], x[:5000])
save_model('news20.model', m)
optimization finished, #iter = 1000
WARNING: reaching max number of iterations Using -s 2 may be faster (also see FAQ)
Objective value = -38.201637 nSV = 1028 .* optimization finished, #iter = 17 Objective value = -18.665411 nSV = 903
Ich weiß nicht was es ist, aber es scheint, dass ich lernen konnte Speichern Sie das erstellte Modell und werfen Sie einen Blick hinein. Wird in einem Ordner als news20.model generiert
weight = open('news20.model').readlines()
weight[:10]
['solver_type L2R_L2LOSS_SVC_DUAL\n', 'nr_class 20\n', 'label 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20\n', 'nr_feature 62017\n', 'bias -1\n', 'w\n', '-0.339495505987624 -0.2729835882642053 -0.1726449590446147 -0.2479101793530862 -0.4274669775000416 -0.2412066297893888 -0.2293917779069297 -0.1540898055174211 -0.215426735582579 -0.2955027766952972 -0.07665514316560521 -0.2067955978156952 -0.2129682323900661 -0.3178416173675406 -0.1100450398128613 -0.1089058297966 0.2118441015471185 -0.1789025390838444 -0.2308991526979358 -0.3216302447541755 \n', '0.03464116990799743 0.03296276686709169 -0.005516289618528965 0 0 8.487270131488089e-19 -0.03693284638681263 0 0 0 -0.0005436471560843025 0 4.336808689942018e-19 0 0 0 -1.355252715606881e-20 0.005881877772996123 0.0004078249397363432 -0.005592803559260878 \n', '0 0 0 0 -0.006337527074141217 0 -0.01043809306013021 -0.02848401075118318 -0.02192217208113558 0 -0.002743696876587976 -0.002823046244597745 5.421010862427522e-19 0 -0.01184141317622985 -0.00327656833111874 -0.00300798970221013 0.07620931881353635 0.07709902339068471 -0.007496992406231962 \n', '0 0.000336438903090087 -0.002105522336459381 -0.003408253600602967 0.04532864192038737 0.00358490636419236 -0.01288493688454648 -0.03829009043077678 -0.02192217208113558 0 -0.002743696876587976 -0.006148372938504376 0.04416917489366715 0 -0.03749035441444219 0.00486249738297638 -0.003188508027714593 0.1323725656877747 0.09645265180639011 -0.01123137774909418 \n']
Es gibt 20 Etiketten, von denen jedes ein Gewicht hat. http://qwone.com/~jason/20Newsgroups/ Vocalary.txt ist der Index. Jetzt können Sie sehen, welche Wörter in der Klassifizierung wirksam sind
vorhersagen
p_label, p_acc, p_val = predict(y[5000:], x[5000:], m)
Accuracy = 74.3576% (8131/10935) (classification)
Die Genauigkeit beträgt 74%, was fair zu sein scheint.
Schauen wir uns das Ergebnis der Vorhersage an. Geben Sie zunächst die richtige Antwort y, das vorhergesagte Label p_label und die Punktzahl p_val jedes Labels zum leichteren Verständnis in den Datenrahmen ein.
import pandas as pd
a=pd.DataFrame([y[5000:],p_label,p_val])
a[0]
a[0][2]
0 1 1 1 2 [-0.434941406833, -2.4992939688, -1.9156773889... Name: 0, dtype: object
[-0.43494140683299093, -2.499293968803961, -1.9156773889387406, -1.652996684855934, -0.64663025115734, -1.981531321375946, -2.0506304515990794, -1.9845217707935987, -1.816531448715213, -1.9993917151454117, -2.6192052686130403, -2.375782174561902, -2.1841316767499994, -2.787946449405093, -1.981463462884227, -2.4769599630955956, -1.3508140247538216, -1.7235783924583472, -1.7785165908522975, -2.2096245620379604]
1 ist am nächsten und entspricht den richtigen Antwortdaten
Mal sehen, wie viel es passt
b=pd.DataFrame([y[5000:],p_label])
b
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 1 1 2 2 4 5 7 4 8 9 4
... 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 0 ... 18 19 7 9 15 16 17 18 19 17 1 ... 18 18 7 9 15 16 17 15 19 17
Es scheint, dass es so gut klassifiziert werden kann
Übrigens bin ich mir bei den Parametern nicht sicher ... Und die Frage ist, wie man diese Daten macht ...
https://github.com/zygmuntz/phraug https://github.com/zygmuntz/phraug/blob/master/csv2libsvm.py Die Konvertierung von CSV hat dies gefunden
Bitte lassen Sie mich wissen, wenn Sie dies tun möchten
Recommended Posts