zoukankan      html  css  js  c++  java
  • 复盘一篇讲sklearn库学习文章(上)

    认识

    sklearn 官网地址: https://scikit-learn.gor/stable/

    从2007年发布以来, scikit-learn已成为重要的Python机器学习库, 简称sklearn, 支持包括分类, 回归, 降维和聚类等机器学习算法, 还包括了特征提取, 数据处理, 模型评估三大模块.

    sklearn是Scipy的扩展, 建立在Numpy, Matplotlib..等库的基础上. 拥有完善的文档, 上手容易, API丰富, 同时封装了大量的机器学习算法, 且内置了大量数据集, 是入门的一个非常好的库哦

    sklearn-机器学习

    学习类型

    有监督学习

    • 认识: 从成对的,已经标注的输入和输出经验数据作为一个输入进行学习, 用来预测结果, 是从用正确答案的例子中学习
    • 应用: 分类问题, 回归问题

    无监督学习

    • 认识: 输入的数据没有标签,没有正确答案, 单纯从数据中找寻规律
    • 应用: 聚类问题, 降维问题

    半监督学习

    • 介于之间, 增强学习

    数据集

    分类

    • 训练集: 用来训练模型的数据集 (50%以上的数据量)
    • 测试集: 用来测试模型的数据集 (25%)
    • 验证集: 调整超参数变量 (25%)

    交叉验证

    • 认识: 将数据集分成N份, 用N-1份训练模型, 在另一块进行测试, 通常5折交叉验证.
    • 优点: 能充分利用数据, 提高模型效果

    模型评估

    • 方差(variance)

    • 偏差(biass)

    • 偏差-方差均衡

      • 真阳性(TP): 正确识别目标
      • 假阳性(FP): 错误识别目标
      • 真阴性(TN): 正确识别非目标
      • 假阴性(FN): 错误识别非目标
    • 指标

      • 准确率(ACC) = (TP+TN) / (TP+TN+FP+FN)
      • 精确率(P) = TP / (FP+FN)
      • 召回率(R) = TP / (TP+FN)

    通俗理解 : 关于准确率, 召回率, 精确率的小案例, 网上找的

    说一个池塘里有1400条鲤鱼, 300只虾, 300只鳖 (即总数是2000). 现在呢, 我想去捞鲤鱼, 一网下去, 捞上来700条鲤鱼, 200只虾, 100只鳖, (即共捞起来总数是1000).

    正确率: (捞起来的鲤鱼数 / 捞起来的总数) = 700 / (200 + 100 + 700) = 70%

    召回率: (捞起来的鲤鱼数 / 总数中的鲤鱼数量) = 700 / 1400 = 50%

    二分类最能说明, 后面单独整一篇关于率的吧..

    sklearn 官方文档结构

    sklearn库的算法主要有四类: 分类, 回归, 聚类, 降维
    什么线性, 决策树, SVM, KNN, 随机森林, Adaboost, 随机梯度下降, Bagging, ExtraTrees...都有的哈

    • preprocession: 数据预处理模块
    • impute: 缺失值处理模块
    • feature_selection: 特征选择模块
    • decomposition: 降维算法模块

    slearn快速使用

    传统的机器学习任务通常的流程是: 获取数据->数据预处理->特征工程(选择, 向量化等)->模型训练->模型评估->预测

    先整一个学统计学时的经典数据集鸢尾花的分类, 共150个样本, 包括4个特征变量和1个类别变量.

    特征变量

    • sepal length: 花萼长度
    • sepal 花萼宽度
    • petal length: 花瓣长度
    • petal 花瓣宽度
    • 类别: iris-setosa(山鸢尾), iris-versicolor(变色鸢尾花), iris-virginica (维吉尼亚鸢尾花)的哪一种
    from sklearn import datasets  # 用内置的数据源
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    
    # 1. 获取数据
    # 数据集是 json, {data:[[]], target_names:xxx, xxx}
    iris = datasets.load_iris()
    # 2. 特征工程 - 获取特征变量和目标变量
    iris_X = iris.data
    iris_y = iris.target
    
    print("数据准备+特征工程--")
    print('X_shape:',iris_X.shape, 'y_shape:',iris_y.shape) # 查看维度
    print('y_target:', iris_y)
    
    # 2. 特征工程 - 划分测试集和训练集
    X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.25)
    
    # 3. 训练模型
    print("开始进行训练---")
    knn = KNeighborsClassifier()  # 实例对象
    knn.fit(X_train, y_train)
    
    print("模型参数:", knn.get_params())
    
    # 4. 模型评价
    
    print("真实值:", y_test)
    print("预测值:", knn.predict(X_test))
    
    score = knn.score(X_test, y_test)
    print("预测得分为:", round(score, 3))
          
    
    
    数据准备+特征工程--
    X_shape: (150, 4) y_shape: (150,)
    y_target: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2]
    开始进行训练---
    
    KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
               metric_params=None, n_jobs=None, n_neighbors=5, p=2,
               weights='uniform')
    
    模型参数: {'algorithm': 'auto', 'leaf_size': 30, 'metric': 'minkowski', 'metric_params': None, 'n_jobs': None, 'n_neighbors': 5, 'p': 2, 'weights': 'uniform'}
    真实值: [0 1 0 2 1 1 0 0 2 0 2 2 0 1 1 2 0 1 1 0 0 0 2 0 1 0 1 1 2 1 1 0 1 1 1 1 1
     2]
    预测值: [0 1 0 2 1 2 0 0 2 0 2 2 0 1 1 2 0 1 1 0 0 0 2 0 1 0 1 1 2 1 2 0 2 1 1 1 1
     2]
    预测得分为: 0.921
    

    先简单引入, 下篇就是详情啦

  • 相关阅读:
    Integer的十进制转二,八,十六进制
    Java内存模型
    python gui --tkinter
    图论-最短路径
    Java NIO
    浏览器关闭后,Session就销毁了吗?
    mysql查询最新一条数据
    MySQL 查看命令执行时间
    MySQL 删除devices表中id最大的一行
    MySQL中的联表查询与子查询
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/11741441.html
Copyright © 2011-2022 走看看