• 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

     

  • 相关阅读:
    舒服,给Spring贡献一波源码。
    自定义动态组件,剩下的三种周期函数
    在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办
    Android 前台服务崩溃RemoteServiceException
    设计模式学习笔记 - 开源实战一(上):通过剖析JDK源码学习灵活应用设计模式
    从ZETA无线通信技术特点出发选择合适的物联网协议
    公众号迁移操作流程是怎样的?
    MySQL导入导出、视图、索引、执行计划
    tomcat类加载-源码解析
    maven
  • 原文地址:https://blog.csdn.net/m0_62329504/article/details/126240196