Показать k ближайших соседей для классификации текста - PullRequest
0 голосов
/ 29 января 2020

У меня есть файл CSV (corpus.csv) с градуированными резюме (текст) в следующем формате в корпусе:

Institute,    Score,    Abstract


----------------------------------------------------------------------


UoM,    3.0,    Hello, this is abstract one

UoM,    3.2,    Hello, this is abstract two and yet counting.

UoE,    3.1,    Hello, yet another abstract but this is a unique one.

UoE,    2.2,    Hello, please no more abstract.

Я пытаюсь создать программу классификации KNN в python, которая может получить реферат пользовательского ввода, такой как «Это новый уникальный реферат», а затем классифицировать этот реферат пользовательского ввода, ближайший к корпусу (CSV), а также возвращает оценку / оценку предсказанного реферата. У меня есть следующий код:

from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords
import numpy as np
import pandas as pd
from csv import reader,writer
import operator as op
import string
from sklearn import neighbors

#Read data from corpus
r = reader(open('corpus.csv','r'))
abstract_list = []
score_list = []
institute_list = []
row_count = 0
for row in list(r)[1:]:
    institute,score,abstract = row[0], row[1], row[2]
    if len(abstract.split()) > 0:
      institute_list.append(institute)
      score = float(score)
      score_list.append(score)
      abstract = abstract.translate(string.punctuation).lower()
      abstract_list.append(abstract)
      row_count = row_count + 1

print("Total processed data: ", row_count)

#Vectorize (TF-IDF, ngrams 1-4, no stop words) using sklearn -->
vectorizer = TfidfVectorizer(analyzer='word', ngram_range=(1,4),
                     min_df = 0, stop_words = 'english', sublinear_tf=True)
response = vectorizer.fit_transform(abstract_list)
classes = score_list
feature_names = vectorizer.get_feature_names()

clf = neighbors.KNeighborsRegressor(n_neighbors=1)
clf.fit(response, classes)
predicted = clf.predict(response)

В настоящий момент, если я использую вышеупомянутый код, то «1007 * предсказано » дает вывод, например, [3.2]. Тем не менее, я также хочу, чтобы выходные данные были [3.2, UoM, «Здравствуйте, это абстрактное два и все же счет.»]

Я хочу показать k ближайших соседей (не только счет, но и соответствующий название учреждения и аннотация). Как мне этого добиться?

1 Ответ

0 голосов
/ 29 января 2020

После подгонки модели вам нужно запустить модель по точке :

>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=1)
>>> neigh.fit(samples)
NearestNeighbors(n_neighbors=1)
>>> print(neigh.kneighbors([[1., 1., 1.]]))
(array([[0.5]]), array([[2]]))

. Это возвращает два массива, где первый - это список расстояний, и второй - список индексов ближайших соседей. Для печати в желаемом формате вам необходимо выполнить поиск тезисов с учетом индексов второго списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...