Мой проект создает классификатор для классификации 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]))
Мне нужно преобразовать входные данные в вектор объектов с ожидаемым объектом, и мой классификатор также может предсказать