绪论
-
库
- 解决数据科学任务和挑战
- Numpy
- Pandas
- 解决数据可视化
- Matplotlib
- 解决机器学习问题
- Scikit-learn
- XGBoost/LightGBM
- 数据采集
- Scrapy
- 解决深度学习任务
- Tensorflow
- PyTorch
- Keras
- 分布式深度学习
- Dist-keras
- elephas
- spark-deep-learning
- 自然语言处理
- NLTK
- SpaCy
- Gensim
- 解决数据科学任务和挑战
-
机器学习项目四大步
- 问题定义与抽象业务
- 问题抽象成数学问题,使用算法模型解决
- 对业务的理解
- 算法模型使用问题
- 明确输入输出
- 数据清洗和特征工程
- 缺失值
- 异常值
- 不规范数据
- 特征选择
- 数据降维
- 算法选择与模型训练
- 算法模型
- 模型调用,训练
- 模型评估指标
- 模型调优与应用
- 模型调参
- 特征优化
- 模型融合
- 问题定义与抽象业务
Python基础知识
编程规范
- 代码开头
Python中的代码必须顶格编写,除非被作为语句嵌套在条件判断或者条件循环 - 代码层级
第一层顶格编写,第二层开头需要预留4个空格(不考虑跨平台可以使用tab) - 对齐方式
同一个层级的代码必须严格对齐(第一层顶格,第二层空4个空格,第三层空8个空格) - 注释
单行注释:#
多行注释:首尾处用成对三引号引用即可,“注释”;"””注释””" - 代码块
逻辑判断i以及循环条件while和for条件后均以冒号结尾,然后通过4个空格开始下一层级的实际执行动作语句编写。(冒号后面接上的语句时代码块)
基本数据类型
Number(数字);String(字符串);List(列表)Tuple(元组);Set(集合);Dictionary(字典)
Numpy
numpy属性:
ndim-维度,shape-行数和列数,size-元素个数
Pandas
序列Series和数据框DataFrame
Series类似于NumPy中的一维数组,可以使用一维数组的可用函数和方法,而且还可以通过索引标签的方式获取数据,具有索引的自动对齐功能
DataFrame类似于Numpy中的二维数组,同样可以使用Numpy数组的函数和方法,还具有一些其它灵活的使用
- pd.Series():
- 通过一维数组创建序列
- 通过字典的方式创建序列
- 通过DataFrame中的某一行或者某一列创建序列
- pd.DataFrame():
- 通过二维数组创建
- 通过字典方式创建
- 通过数据框创建
查询数据,我们需要使用索引有针对的选取原数据中的子集,指定行,指定列等
无论数据框还是序列,最左侧始终有一个非原始数据对象,这个就是接下来要介绍的数据索引
通过索引获取目标数据,对数据进行一系列的操作
- 通过index属性获取序列的索引值
- 更改index
- 通过索引获取数据
- 自动化对齐
sklearn
- Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)方法。
- 常用的回归:线性、决策树、SVM、KNN;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
- 常用的分类:线性、决策树、5VM、KNN,朴索贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting.Bagging、ExtraTrees
- 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN常用降维:LinearDiscriminantAnalysis、PCA
- 常规使用模式
- 导包
- 加载数据
- 数据预处理:降维,数据归一化,特征提取,特征转换
- 选择算法训练数据:直接查看api找到你需要的方法,直接调用即可,其中你可能需要调调参等
- 测试数据:使用模型自带的score方法,或者使用sklearn指标函数,或者使用自己的评价方法
- 预测结果写入.csv中
- 数据标准化
- 存在的问题:如果某个特征的方差比其他特征大几个数量级,那么他就会在学习算法中占据主导位置,导致学习器对其他特征有所忽略。
- 概念:标准化:先对数据进行去中心化,再除以特征的标准差,对数据进行缩放
-
实现方式:数据标准化通过sklarn中
preprocessing.scale()
方法实现
- 交叉验证
- 思想:重复使用数据,把得到的样本数据进行切分,组合成为不同的训练集和验证集,用训练集来训练模型,用验证集评估模型预测的好坏
- 简单的交叉验证:随机的将样本数据分为两部分(如70%训练,30%测试),然后用训练集来训练模型,在验证集上验证模型及参数;接着再把样本打乱,重新选择训练集和验证集,重新训练验证,最后选择损失函数评估最优的模型和参数
- K折交叉验证:随机将样本数均分为K份,每次随机选择其中的k-1份作为训练集,剩下的1份做验证集。当这一轮完成后,重新随机选择k-1份来训练数据,若干轮后选择损失函数评估最优的模型和参数。
- 留一交叉验证:留一交叉验证是k折交叉验证的一种特例,此时k=n(样本的个数),每次选择n-1个样本进行训练,留一个样本进行验证模型的好坏(这种方法适合样本量非常少的情况)
- boostrapping自助采样:这种方法也是随机森林训练样本采用的方法。在n个样本中随机有放回抽样m个样本作为一颗树的一个训练集,这种采用会大约有1/3的样本不被采到,这些不被采到的样本就会被作为这棵树的验证集。
- 过拟合
- 过拟合的问题是因为模型过于复杂,对于训练数据能很好的拟合,却不能正确的处理测试数据,从一个角度说就是,学到了一些样本数据一些非通用信息,使得模型的泛化效果非常不好。
-
learning_curve()
:主要是用来判断(可视化)模型是否过拟合的 -
validation curve()
:主要是用来查看在参数不同的取值下模型的性能
- 保存模型
- 目的:节约时间,方便的将模型迁移
- 从sklearn中导入自带保存模块
from sklearn.externals import joblib
- 保存模型
joblib.dump(model,'sklearn_save/clf.pkl')
- 重新加载模型
model2=joblib.load('sklearn_save/clf.pkl')
参考
深度之眼-Python基础训练营