Код ниже грузит некоторые готовые тексты из базы данных
fetch_20newsgroups (Вам нужно переделать на чтение из файла .csv с помощью функции pd.read_csv()). Выход кода - по 10 самых важных слов в текстах о религии и в текстах о космосе. Эти важные слова - есть суть опорные вектора SVM, по которым собственно тексты классифицируются.
Также код выводит некоторую другую информацию в целях обучения начинающих машинообученцев.
Код:
#Определение опорных объектов
import pandas as pd
data = pd.read_csv('c:/Anaconda/share/svm-data.csv', names=['y','x1','x2'], index_col='y')
y=data.index
x=data.values
from sklearn.svm import SVC
clf = SVC(C=100000.0, kernel='linear', random_state=241)
clf.fit(x,y)
print(clf.support_)
#Настройка оптимизации
from sklearn import datasets
newsgroups = datasets.fetch_20newsgroups(subset='all', categories = ['alt.atheism', 'sci.space'])
data = newsgroups.data
y = newsgroups.target
#Векторизация текста
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(data)
x = vectorizer.fit_transform(data)
#Подбор оптимального параметра С
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold
from sklearn.svm import SVC
import numpy as np
grid = {'C': np.power(10.0, np.arange(-5, 6))}
cv = KFold(n_splits=5, shuffle=True, random_state=241)
clf = SVC(kernel='linear', random_state=241)
gs = GridSearchCV(clf, grid, scoring='accuracy', cv=cv)
gs.fit(x,y)
print(gs.best_params_)
clf = SVC(C=1, kernel='linear', random_state=241)
clf.fit(x,y)
W = np.sort(np.absolute(clf.coef_.toarray())) #отсортированные по модулю веса слов
indices = np.argsort(np.absolute(clf.coef_.toarray())) #отсортированные по модулю весов индексы слов
ten_indices = np.array(indices[0,-10:], dtype=int) #последние 10 индексов
list = [vectorizer.get_feature_names()[i] for i in ten_indices]
print(np.sort(list))
Честно говоря, не помню, что за цифры в файле svm-data.csv, но там одни цифры:
Код:
0.0, 0.7, 0.29
1.0, 0.23, 0.55
0.0, 0.72, 0.42
0.0, 0.98, 0.68
0.0, 0.48, 0.39
1.0, 0.34, 0.73
0.0, 0.44, 0.06
1.0, 0.4, 0.74
0.0, 0.18, 0.18
1.0, 0.53, 0.53