机器学习:从入门到脊椎康复

一.定义

从数据中学习,得到模型,通过模型预测结果

二.作用:

1.传统预测
2.图像识别
3.自然语言处理

三.机器学习算法分类

1.监督学习:有目标值

  • 目标值:类别 (分类问题)
    分类:k-近邻算法,贝叶斯分类,决策树与随机森林,逻辑回归

  • 目标值:连续型的数据 (回归问题)
    回归:线性回归,岭回归

2.无监督学习:

  • 目标值:无 (无监督学习)
    聚类:k-means

四. 机器学习开发流程

1.获取数据
2.数据处理
3.特征工程
4.机器学习算法训练,得到模型
5.模型评估
6.应用

五.sklearn相关信息

1.可用数据集

  • 1.数据类型

load_* 获取小规模数据集(数据包含在datasets)
栗子:sklearn.datasets.load_iris()

fetch_* 获取大规模数据集(从网络上下载的大规模数据)
栗子:sklearn.datasets.fetch_20newsgroups(data_home=None,subset='all')

PS:subset:有’train’(训练集的"训练"),‘test’(测试集的"测试"),‘all’(两者的"全部")三种类型

  • 2.sklearn数据集返回值

datasets.base.Bunch(继承自字典)
方法一:dict[“key”] = values
方法二:bunch.key = values
load和fetch返回的数据类型datasets.base.Bunch(字典格式),所以有键值对

键的五种类型:
1. data(特征值):特征数据数组,是[n_samples*n_features]的二维numpy.ndarray数组
2. target(目标值):标签数组,是n_samples的一维numpy.ndarray数组
3. DESCR:数据描述
4. feature_names:特征名, 新闻数据,手写数据,回归数据集没有
5. target_names:标签名

栗子:

from sklearn.datasets import load_iris
def datasets1():
    set1 = load_iris()
    print(f"鸢尾花数据集:\n{set1}")
    print(f"查看数据集:\n{set1['DESCR']}")
    print(f"查看特征值的名字:\n{set1.feature_names}")
    return None

if __name__ == "__main__":
    datasets1()

分析

# ----导入sklearn库中的iris数据----
from sklearn.datasets import load_iris"

# ----定义一个查看iris相关数据的函数----
def datasets1():
    set1 = load_iris()
    print(f"鸢尾花数据集:\n{set1}")
    print(f"查看数据集:\n{set1['DESCR']}")
    print(f"查看特征值的名字:\n{set1.feature_names}")
    return None

# ----调用上面的函数----
if __name__ == "__main__":

PS: if __name__ == '__main__':的运行原理
每个python模块都包含内置的变量 __name__,当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。
而 “__main__” 始终指当前执行模块的名称(包含后缀.py)。进而当模块被直接执行时,__name__ == 'main' 结果为真。

    datasets1()

PS:运行后数据有4列,说明有四个特征值
Attribute Information:(特征值)
花的长,宽
- sepal length in cm
- sepal width in cm
- petal length in cm
- petal width in cm

class:(目标值)
鸢尾花的三个类别:
- Iris-Setosa
- Iris-Versicolour
- Iris-Virginica

2.特征工程和数据预处理

1.特征工程

特征工程会直接影响机器学习的效果

特征工程的位置与数据处理的比较:

  • pandas:数据清洗,数据处理

  • sklearn:特征工程

    1.特征抽取:将任意数据转化为可用于机器学习的数字特征

    • 字典特征提取(特征离散化)

    • 文本特征提取

    • 图像特征提取

      特征提取API
      sklearn.feature_extraction
      3.字典提取特征:将类别转换为one-hot编码
      sklearn.feature_extraction.DicVectorizer()
      DicVectorizer.fit_transform(X)X:字典或包含字典的迭代器返回值,返回sparse矩阵
      DicVectorizer.inverse_transform(X)X:array数组或者sparse矩阵,返回值:转换之前数据格式
      DicVectorizer.get_feature_names()返回类别名称
      vector 数学:向量 物理:矢量
      矩阵:matrix 二维数组
      向量:vector 一维数组

2.特征预处理

通过一些转化函数将特征数据转换成更加适合算法模型的特征数据过程

  • 数值型数据的无量纲化:消除由于不同特征数据数量级差别过大带来的影响

  • sklearn.preprocessing

    • 归一化:将原始数据进行变化把数据映射到一个范围(默认[0,1])之间
      - API
      sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
      MinMaxScaler.fit_transform(X)
      X:numpy array格式的数据[n_samples,n_features]
      返回值:转换后的形状相同的array

    • 标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围
      - API
      sklearn.`preprocessing.StandardScaler()

      • 处理之后,每列的数据都聚集在均值为0附近,标准差为1
      • StandardScaler.fit_transform(X)
        X:numpy array格式的数据[n_samples,n_features]
        返回值:转换后的形状相同的array
  • 归一化和标准化区别
    - 归一化:如果出现异常点,影响了最大值和最小值.结果会发生改变
    - 标准化:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响不大,从而方差改变较小

3.决策树和随机森林

1.决策树
  • 原理:信息熵,信息增益等
  • 根据特征的先后顺序高效的进行决策
  • 决策树分类原理:用尽可能少的特征值进行准确划分
  • 信息:消除随机不定性的东西
  • 信息熵用于衡量信息量
  • 决策树划分依据
    1.ID3
    信息增益最大原则
    2.C4.5
    信息增益比最大的原则
    3.CART
    - 分类树:基尼系数最小的原则
    - 优势:划分更加细致
  • API
    class sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random)
    - 决策树分类器
    - criterion:默认是’gini’系数,也可以选择信息增益的熵’entropy’
    - max_depth:树的深度大小,决定分类是否细致
    - random_state:随机数种子
  • 决策树可视化
    1.保存树的结构到dot文件
    sklearn.tree.export_graphviz()能导出dot格式
    - tree.export_graphviz(estimator,out_file='tree.dot',feature_names=[","])
    2.将导出的文本文件拷贝到 http://webgraphviz.com/生成树
    link
  • 优点:可视化,可解释能力强,
  • 缺点:容易产生过拟合
    改进:
    1.减枝
    2.随机森林
2.随机森林
  • 集成学习方法:通过建立几个模型组合来解决单一预测问题,工作原理是生成多个分类器/模型,各自独立地学习和做出预测.这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测
  • 随机森林:是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
  • 随机森林的原理:两个随机:
    1.训练集随机 :采取bootstrap随机有放回抽样
    2.特征随机:从M个特征中随机抽取m个特征,可以达到降维效果
  • API
    class sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion='gini',max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
  • 优点:
    1.在所有算法中有极好的准确率
    2.能够有效地在大数据集上运行,处理具有高维特征的输入样本,而且不需要降维
    3.能够评估各个特征在分类问题上的重要性

4.模型选择与调参

1.交叉验证

将拿到的训练数据,分为训练和验证集
比如将数据分成4份,其中一份作为验证集,然后经过4次测试,每次更换不同的验证集,得到四组模型的结果,称为4折交叉验证

训练集:训练集 + 验证集
测试集:测试集

2.超参数搜索-网格搜索

需要手动指定的(如k-近邻算法中的k值),叫做超参数.由于手动过程繁杂,所以对模型预设几种超参数组合.每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型

3.模型选择与调优API

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_

5.降维

  • 降维:降低二维数组中随机变量的个数,得到一组"特征之间不相关"主变量的过程

  • 特征选择:数据中包含冗余或相关变量(或称特征,属性,指标等),旨在从原有特征中找出主要特征
    方法:
    1.filter(过滤式)
    主要探究特征本身特点,特征与特征和目标值之间关联

    • 方差选择法:低方差特征过滤
      删除低方差的一些特征,再结合方差的大小来考虑这个方式的角度
      特征方差小:某个特征大多样本的值比较相近(去掉)
      特征方差大:某个特征很多样本的值都有差别(保留)
      API:
      sklearn.feature_selection.VarianceThreshould(thresh = 0.0)
      删除所有低方差特征:
      Variance.fit_transform(X)
      X:numpy array格式的数据[n_samples.n_features]
      返回值:训练集差异低于threshould的特征将被删除.默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征

    • 相关系数:特征与特征之间的相关程度
      取值范围:-1 <= r <= +1
      API:
      from scipy.stats import pearsonr
      - x:(N,)array_like
      - y:(N,)array_like Returns:(Pearson’s correlation coefficient,p-value)

      特征与特征之间相关性很高:
      1.选取其中一个
      2.加权求和
      3.主成分分析:
      - 定义:高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量
      - 作用:使数据维数压缩,尽可能降低原数据的维度(复杂度),损失少量信息
      - 应用:回归分析或者聚类分析当中
      API:
      sklearn.decomposition.PCA(n_components = None)
      1.n_components:
      - 小数:表示保留百分之多少的信息
      - 整数;减少到多少特征
      2.PCA.fit_transform(X)
      - X:numpy array格式的数据
      3.返回值:转换后指定维数的array

    2.Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
    - 决策树
    - 正则化
    - 深度学习

6.逻辑回归

用于解决二分类问题

  • 原理:线性回归的输出就是逻辑回归的输入,将回归的结果输入到sigmoid函数当中.输出结果:[0,1]区间中的一个概率值,默认为0.5为阈值,结果小于阈值则不属于这个类别,大于阈值则属于这个类别
  • 损失:逻辑回归的损失,称为对数似然损失
  • API:
    sklearn.linear_model.LogisticRegression(solver='liblinear',penalty='I2',C=1.0)
    - solver:优化求解方法
    - sag:根据数据集自动选择,随机平均梯度下降
    - penalty;正则化的种类
    - C:正则化力度
    - 默认将类别数量少的当作正则
  • 流程分析:
    1.获取数据
    读取的时候加上names
    2.数据处理
    处理缺失值
    3.数据集划分
    4.特征工程:
    无量纲化处理-标准化
    5.逻辑回归于预估器
    6.模型评估
  • 分类的评估方法
    1.混淆矩阵:
    TP = True Possitive
    FN = False Negative
    2.精确率与召回率
    3.F1-score 模型的稳健性
  • 分类评估报告API
    sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)
    - y_true:真实目标值
    - y_pred:估计器预测目标值
    - labels:指定类别对于的数字
    - target_names:目标类别名称
    - return:每个类别精确率与召回率

你可能感兴趣的:(python,sklearn)