liblinear est une bibliothèque d'apprentissage d'opportunités pour séparer linéairement les données avec 1 million de chiffres d'instance et de fonctionnalités. https://www.csie.ntu.edu.tw/~cjlin/liblinear/ En tant que fonctionnalité, il est différent des autres en ce sens qu'il peut traiter rapidement un grand nombre d'éléments.
Quoi qu'il en soit, mettez-le sur le bureau et appuyez dessus. Tout d'abord, mettez ce que vous souhaitez importer. Au lieu d'ouvrir un terminal (ou cmd) et de taper immédiatement la commande ipython, allez dans le répertoire (dossier) où vous souhaitez travailler, puis lancez ipython.
import sys
sys.path.append('/Users/xxxx/Desktop/liblinear-2.1/python')
from liblinearutil import *
from liblinear import *
Les données utilisées sont les actualités suivantes20 https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html La forme des données linéaires est particulière. Lors de son utilisation, il est nécessaire de le traiter dans cette forme
y, x = svm_read_problem('news20.txt')
train → prédire
In [20]: len(y)
Out[20]: 15935
#Puisqu'il y a 15935 éléments de données, jusqu'à 5000 éléments peuvent être formés comme données d'enseignant.
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
Je ne sais pas ce que c'est, mais il semble que j'ai pu apprendre Enregistrez le modèle créé et jetez un œil à l'intérieur. Généré dans un dossier sous le nom news20.model
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']
Il y a 20 étiquettes, chacune ayant un poids. http://qwone.com/~jason/20Newsgroups/ Vocalary.txt est l'index. Vous pouvez maintenant voir quels mots sont efficaces dans la classification
prédire
p_label, p_acc, p_val = predict(y[5000:], x[5000:], m)
Accuracy = 74.3576% (8131/10935) (classification)
La précision est de 74%, ce qui semble juste.
Regardons le résultat de la prédiction. Tout d'abord, mettez la bonne réponse y, l'étiquette prédite p_label et le score p_val de chaque étiquette dans le bloc de données pour une compréhension facile.
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 est le plus proche et est le même que les données de réponse correctes
Voyons à quel point cela correspond
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
Il semble qu'il puisse être si bien classé
Au fait, je ne comprends pas vraiment les paramètres ... Et la question est de savoir comment rendre ces données ...
https://github.com/zygmuntz/phraug https://github.com/zygmuntz/phraug/blob/master/csv2libsvm.py La conversion à partir du CSV a détecté ceci
S'il vous plaît laissez-moi savoir si vous souhaitez faire cela
Recommended Posts