• K-临近算法


    3.1 sklearn转换器和估计器

    转换器        估计器(estimator)

    3.1.1 转换器 —— 特征工程的父类

    1 实例化(实例化的是一个转换器(Transformer))

    2 调用fit-transform(对于文档建立分类词频矩阵,不能同时调用)

    标准化:

    (x - mean)/ std

    fit_transform()

    fit()        计算 每一列的平均值、标准差

    transform()        (x-mean)/ std 进行最终的转换

    3.1.2  估计器(sklearn机器学习算法实现)

    估计器(estimator)

    1 实例化一个estimator

    2  estimator,fit(x_train,y_train)计算

    —— 调用完毕 模型生成

    3 模型评估

    1)直接比对真实值和预测值

    y_predict = estimator.predict(x_test)

    y_test == y_predict

    2)计算准确率

    accuracy = estimator.score(x_test,y_test)

    什么是K-近邻算法,核心思想:你的临近来推断你的类别

    如何确定近邻:距离公式

    曼哈顿距离 绝对值距离

    明可夫斯基距离

    如果k值取的不一样,有什么样的影响

    k 值过小 容易受到异常点影响

    k 值过大 样本不均衡的影响

    使用k-近邻算法需要进行无量纲化处理和标准化处理

    优点:简单,易于理解,易于实现,无需训练

    缺点:必须指定k值,k值选择不恰当则分类精度不能保证

                懒惰算法,对测试样本分类时的计算量大,内存开销大

    1. from sklearn.datasets import load_iris
    2. from sklearn.model_selection import train_test_split
    3. from sklearn.preprocessing import StandardScaler
    4. from sklearn.neighbors import KNeighborsClassifier
    5. def knn_iris():
    6. """
    7. 用KNN算法对鸢尾花进行分类
    8. :return:
    9. """
    10. # 1)获取数据
    11. iris = load_iris()
    12. # 2)划分数据集
    13. x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
    14. # 3)特征工程 标准化
    15. transfer = StandardScaler()
    16. x_train = transfer.fit_transform(x_train)
    17. x_test = transfer.transform(x_test)
    18. # 4)KNN算法预估器 n_neighbors=3就是值k值
    19. estimator = KNeighborsClassifier(n_neighbors=3)
    20. estimator.fit(x_train, y_train)
    21. # 5)模型评估
    22. # 方法1 直接比对真实值和预测值
    23. y_predict = estimator.predict(x_test)
    24. print("y_predict:\n", y_predict)
    25. print("直接比对真实值和预测值:\n", y_test == y_predict)
    26. # 方法2 计算准确率
    27. score = estimator.score(x_test, y_test)
    28. print("准确率为:\n", score)
    29. return None
    30. if __name__ == "__main__":
    31. # 代码1 用KNN算法对鸢尾花进行分类
    32. knn_iris()

     模型选择与调优

    • sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)
    • 对估计器的指定参数值进行详尽搜索
    • estimator:估计器对象
    • param-grid:估计器参数(dict){"n_neighbors":[1,3,5]}
    • cv:指定几折交叉验证
    • fit():输入训练数据
    • score():准确率
    • 结果分析:
    1. 最佳参数:best_params
    2. 最佳结果:best_score
    3. 最佳估计器: best_estimator
    4. 交叉验证结果:cv_results

     

    1. def knn_iris_gscv():
    2. """
    3. 用knn算法对鸢尾花进行分类,添加网络搜索和交叉验证
    4. :return:
    5. """
    6. # 1)获取数据
    7. iris = load_iris()
    8. # 2)划分数据集
    9. x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
    10. # 3)特征工程 标准化
    11. transfer = StandardScaler()
    12. x_train = transfer.fit_transform(x_train)
    13. x_test = transfer.transform(x_test)
    14. # 4)KNN算法预估器
    15. estimator = KNeighborsClassifier()
    16. # 加入网络搜索和交叉验证
    17. # 参数准备
    18. param_dict = {"n_neighbors": [3, 5, 7, 9]}
    19. estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
    20. estimator.fit(x_train, y_train)
    21. # 5)模型评估
    22. # 方法1 直接比对真实值和预测值
    23. y_predict = estimator.predict(x_test)
    24. print("y_predict:\n", y_predict)
    25. print("直接比对真实值和预测值:\n", y_test == y_predict)
    26. # 方法2 计算准确率
    27. score = estimator.score(x_test, y_test)
    28. print("准确率为:\n", score)
    29. # 最佳参数:best_params_
    30. print("最佳参数\n", estimator.best_params_)
    31. # 最佳结果:best_score_
    32. print("最佳结果\n", estimator.best_estimator_)
    33. # 最佳估计器: best_estimator_
    34. print("最佳估计器\n", estimator.best_estimator_)
    35. # 交叉验证结果:cv_results_
    36. print("交叉验证结果\n", estimator.cv_results_)
    37. return None

     

  • 相关阅读:
    [深入研究4G/5G/6G专题-48]: 5G Link Adaption链路自适应-4-下行链路自适应DLLA-PDCCH信道
    SpringBoot Banner图修改
    计算机操作系统-第十二天
    Selenium的安装以及简单使用
    qmake 手册:概述
    ide 快捷键
    LeetCode --- 1417. Reformat The String 解题报告
    JVM ZGC垃圾收集器
    【博弈论】SG(Sprague–Grundy)定理证明和Nim游戏正确性证明
    chrome浏览器 给windows通知中心 发消息
  • 原文地址:https://blog.csdn.net/m0_62329504/article/details/126240196