Использование TfidVectorizer (), но с ошибкой 'ValueError: X имеет 3 функции на выборку;ожидая 3231926 ' - PullRequest
2 голосов
/ 19 апреля 2019

Мой проект создает классификатор для классификации URL, который можно безопасно посещать, и это набор данных для модели обучения с использованием формата SVMLight

"http://www.sysnet.ucsd.edu/projects/url/#datasets" (Как я могу прочитать эти наборы данных в виде текста?)

Я пытаюсь преобразовать URL-адрес в вектор объектов с помощью TfidfVectorizer (), но я получаю эту ошибку при прогнозировании.

"ValueError: X has 3 features per sample; expecting 3231926"

Я пытаюсь использовать

tvect = HashingVectorizer(n_features=n_features-26)

и SGDClassifier может предсказать ввод, но всегда классифицировать в классе «1» (URL-адрес безопасен для посещения)

Я пытаюсь ввести вредоносный URL-адрес, такой как "http://www.batmanporn.com"," http://www.virusparty.com", но все жеклассифицировать в "1" классе

import tarfile
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import classification_report
from sklearn.datasets import load_svmlight_file
#from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

uri = 'C:\\Users\\faceb\\svm_light\\url_svmlight.tar.gz'
tar = tarfile.open(uri,"r:gz")
max_obs = 0
max_vars = 0
i = 0
split = 5
for tarinfo in tar:
    print ("extracting %s, f size %s" % (tarinfo.name, tarinfo.size))
    if tarinfo.isfile():
        f = tar.extractfile(tarinfo.name)
        X,y = load_svmlight_file(f)
        max_vars = np.maximum(max_vars, X.shape[0])
        max_obs = np.maximum(max_obs, X.shape[1])
    if(i > split):
        break
    i+= 1
print ("max X = %s, max y dimension = %s" % (max_obs, max_vars))
classes = [-1,1]
sgd = SGDClassifier(loss="log")
n_features = max_obs
i = 0
for tarinfo in tar:
    if i>split:
        break
    if tarinfo.isfile():
        f = tar.extractfile(tarinfo.name)
        data = load_svmlight_file(f,n_features=n_features)
        print ("%s,%s" % (data[0],data[1]))
        if i < split:
            sgd.partial_fit(X, y, classes=classes)
        if i == split:
            print (classification_report(sgd.predict(X),y))
    i += 1      

url = ["nothing here"]
url[0] = input('Enter url : ')
#vectorizer = HashingVectorizer(n_features=n_features-26)
tvect = TfidfVectorizer(max_features=n_features)
tvect.fit(url)
vector = tvect.transform(url)
new_predict = sgd.predict(vector)
if(new_predict == 1): // always true
    print("%s is safe to visit" % (url[0]))
elif(new_predict == -1):
    print("%s is not safe to visit" % (url[0]))

Мне нужно преобразовать входные данные в вектор объектов с ожидаемым объектом, и мой классификатор также может предсказать

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