Машинное обучение-K-Nearest Neighbor Algorithm-Model Selection and Tuning

искусственный интеллект Python

предисловие

В алгоритме 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_)