предисловие
В алгоритме KNN выбор значения k оказывает большое влияние на наш окончательный результат прогнозирования.
Итак, есть ли хороший способ помочь нам выбрать хорошее значение k?
Выбор модели и настройка
Цель
-
Объясните процесс перекрестной проверки
-
Объясните процесс параметрического поиска
-
Оптимизация параметров алгоритма с помощью GridSearchCV
применение
Настройка предсказания местоположения регистрации в Facebook
Что такое перекрестная проверка
определение
Разделите полученные обучающие данные на обучающий и проверочный наборы.На следующем рисунке приведен пример: Разделите данные на 4 части, одна из которых используется как проверочный набор, а затем пройдите 4 теста (группы), каждый раз меняя разные валидационный набор, то есть получаются результаты 4-х групп моделей, а за окончательный результат берется среднее значение. Поскольку данные разделены на 4 части, мы называем это 4-кратной перекрестной проверкой.
анализировать
Мы знаем, что данные разделены на обучающую выборку и тестовую выборку, но ** для того, чтобы сделать результаты обучения модели более точными. ** Сделайте следующее
-
Набор для обучения: набор для обучения + набор для проверки
-
тестовый набор: тестовый набор
Зачем перекрестная проверка
Цель перекрестной проверки: сделать оцениваемую модель более точной и достоверной.
Поиск гиперпараметров — поиск по сетке
Обычно существует множество параметров, которые необходимо указать вручную (например, значение k в алгоритме K-ближайшего соседа), которые называются гиперпараметрами. Однако ручной процесс сложен, поэтому для модели необходимо задать несколько комбинаций гиперпараметров. Каждый набор гиперпараметров оценивается с помощью перекрестной проверки. Наконец, для построения модели выбирается оптимальное сочетание параметров.
Выбор модели и настройка API
-
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
-
выполнить подробный поиск по указанному значению параметра оценщика
-
оценка: объект оценки
-
param_grid: параметры оценки (dict) {'n_neighbors':[1,3,5]}
-
cv: указать количество сгибов для перекрестной проверки
-
fit : ввод тренировочных данных
-
оценка: точность
-
Анализ результатов:
-
bestscore: лучший результат, подтвержденный перекрестной проверкой_
-
bestestimator: лучшая параметрическая модель
-
cvresults: результаты точности набора валидации и результаты точности тренировочного набора после каждой перекрестной проверки.
Корпус диафрагмы с увеличенной настройкой значения K
Создание оценщика с помощью GridSearchCV
def knn_iris_gscv():
"""
用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
:return:
"""
# 1)获取数据
iris = load_iris()
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
# 3)特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4)KNN算法预估器
estimator = KNeighborsClassifier()
# 加入网格搜索与交叉验证
# 参数准备
param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
estimator.fit(x_train, y_train)
# 5)模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
# 最佳参数:best_params_
print("最佳参数:\n", estimator.best_params_)
# 最佳结果:best_score_
print("最佳结果:\n", estimator.best_score_)
# 最佳估计器:best_estimator_
print("最佳估计器:\n", estimator.best_estimator_)
# 交叉验证结果:cv_results_
print("交叉验证结果:\n", estimator.cv_results_)