Я думаю, что машинное обучение интересно, и я изучаю документацию по scikit learn для удовольствия. Ниже я провел некоторую очистку данных, и дело в том, что я хочу использовать поиск по сетке, чтобы найти наилучшие значения для параметров.
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import metrics
import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
cats = ['sci.space','rec.autos','rec.motorcycles']
newsgroups_train = fetch_20newsgroups(subset='train',remove=('headers', 'footers', 'quotes'), categories = cats)
newsgroups_test = fetch_20newsgroups(subset='test',remove=('headers', 'footers', 'quotes'), categories = cats)
vectorizer = TfidfVectorizer( stop_words = "english")
vectors = vectorizer.fit_transform(newsgroups_train.data)
vectors_test = vectorizer.transform(newsgroups_test.data)
clf = SVC(C=0.4,gamma=1,kernel='linear')
clf.fit(vectors, newsgroups_train.target)
vectors_test = vectorizer.transform(newsgroups_test.data)
pred = clf.predict(vectors_test)
print(accuracy_score(newsgroups_test.target, pred))
Точность: 0,849
Я слышал о поиске по сетке, чтобы найти оптимальное значение параметров, но я не могу понять, как это сделать. Можете ли вы уточнить? Это то, что я пытался, но это не правильно. Я хотел бы узнать правильный путь вместе с некоторыми объяснениями. Спасибо
Cs = np.array([0.001, 0.01, 0.1, 1, 10])
gammas = np.array([0.001, 0.01, 0.1, 1])
model = SVC()
grid = GridSearchCV(estimator=model, param_grid=dict(Cs=alphas,gamma=gammas))
grid.fit(newsgroups_train.data, newsgroups_train.target)
print(grid)
# summarize the results of the grid search
print(grid.best_score_)
print(grid.best_estimator_.alpha)
РЕДАКТИРОВАТЬ на основе полученного ответа:
parameters = {'C': [1, 10],
'gamma': [0.001, 0.01, 1]}
model = SVC()
grid = GridSearchCV(estimator=model, param_grid=parameters)
grid.fit(vectors, newsgroups_train.target)
print(grid)
# summarize the results of the grid search
print(grid.best_score_)
print(grid.best_estimator_)
Это возвращает:
GridSearchCV(cv='warn', error_score='raise-deprecating',
estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False),
fit_params=None, iid='warn', n_jobs=None,
param_grid={'C': [1, 10], 'gamma': [0.001, 0.01, 1]},
pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
scoring=None, verbose=0)
0.8532212885154061
SVC(C=10, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma=1, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
Мне нужны разъяснения по этим вопросам:
1)What actually is displayed on the results?
2)Does it also take ranges for C as 1 to 10 or either 1 or 10?
3)Can you suggest anything to improve accuracy further?
4)I noticed that the Tfidf made the accuracy worse even though it
cleaned the data from words that dont have any value
2 ответа
Вы хотите передать словарь параметров, где ключами являются имя параметра в соответствии с документацией модели (1). Значения должны быть списком значений, которые вы хотели бы попробовать.
Поиск по сетке будет затем вызывать все возможные комбинации этих параметров. Есть несколько хороших примеров с документацией (2).
- https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
- https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
Для вашего сценария вы также должны убедиться, что вы используете для поиска в таблице правильные данные обучения, в данном случае «векторы», а не «newsgroups_test.data».
Увидеть ниже:
parameters = {'C': [1, 10],
'gamma': [0.001, 0.01, 1]}
model = SVC()
grid = GridSearchCV(estimator=model, param_grid=parameters)
grid.fit(vectors, newsgroups_train.target)
print(grid)
# summarize the results of the grid search
print(grid.best_score_)
print(grid.best_estimator_)
Пожалуйста, примите ответ, если он работает. Удачи!
Для повышения точности:
Вы можете исследовать много других моделей. Обычно мы используем LSTM, RNN и т. Д. Для решения текстовых задач. Вы должны изучить эти модели с помощью Keras.
Grid Search
Поиск по сетке, рандомизированный поиск по сетке можно использовать для опробования различных параметров. По сути, он возвращает лучший набор гиперпараметров, которые были получены из метрики, на которую вы настраивали. Может принимать как диапазоны, так и просто значения. Поиск параметров является абсолютно случайным с Grid Search. Лучшей альтернативой является HyperOpt, где он действительно узнает что-то из параметров, которые были получены в прошлом. Так что работа с этим даст лучший набор параметров гораздо быстрее.
Вы можете перейти по этой ссылке для лучшего понимания: https://medium.com/vantageai/bringing-back-the-time-spent-on-hyperparameter-tuning-with-bayesian-optimisation-2e21a3198afb
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.