# 模型的保存和加载
from sklearn.externals import joblib
# 模型的保存和加载
from sklearn.externals import joblib
## 过拟合与欠拟合
> 问题:训练集数据训练得很好,误差也不大,在测试集上有问题 原因:学习特征太少,导致区分标准太粗糙,不能准确识别处目标
- 欠拟合:特征太少
- 过拟合:特征过多
特征选择:
- 过滤式:低方差特征
- 嵌入式: 正则化,决策树,神经网络
## 2、线性回归策略
> 预测结果与真实值有误差
> 回归:迭代的算法,知道误差,不断减小误差,
### 损失函数
- 最小二乘法之梯度下降
scikit-learn:
- 优点:封装好,建立模型简单,预测简单
- 缺点:算法的过程,有些参数都在算法API内部优化
## 集成学习方法-随机森林
### 集成学习方法
> 通过建立几个模型组合来解决单一预测问题。工作原理是生成多个分类器/模型,各自独立地学习和做出预测,这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。
### 随机森林
> 在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。多个决策树来投票
### 随机森林建立多个决策树的过程
# 分类算法:决策树、随机森林
## 1、认识决策树
### 决策树的划分
## 2、信息的度量和作用
> 信息的单位:比特
### 信息熵
> 信息和消除不确定性xiang'guan
# 模型选择与调优
## 1、交叉验证
> 为了让被评估的模型更加准确可信\
> 将训练集再分为训练集和验证集 将所有数据分成n等分
##2、网格搜索:调参数
K-近邻:超参数
> 通常情况下,很多参数需要手动指定,如k值,这种叫超参数。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型
# 分类模型的评估
> estimator.score()
- 一般最常见使用的是准确率,即预测结果正确的百分比
## 精确率和召回率
> 预测结果为正例样本中真实为正例的比例(查得准)
> 召回率:真实为正例的样本中预测结果为整理的比例(查的全,对正样本的区分能力)
# 分类算法-朴素贝叶斯算法
## 一、概率基础
> 概率被定义为一件事件发生的可能性
## 二、联合概率和条件概率
> 联合概率:包含多个条件,且所有条件同时成立的概率 p(a,b)=p(a)xp(b)
> 条件概率:就是事件a在另外一个事件b已经发生条件下的发生概率 记作p(a|b), p(a1,a2|b)=p(a1|b)p(a2|b), 次条件概率的成立,是由于a1,a2相互独立的结果
### 例题
## 三、朴素贝叶斯 : 特征之间需要相互独立
### 文档分类
- p(科技|文档) 文档1: 词1,词2,词3
- p(娱乐|文档) 文档2:词a,词b,词c
### 贝叶斯公式
# 一、分类算法-K-近邻算法
> 通过邻居判断类别
## 一、定义
> 如果一个样本在特征空间中的 k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
> 来源:KNN算法,一种分类算法
## 二、计算距离公式:欧式距离
> 相似的样本,特征之间的值都是相近的。
> 计算特征距离时,应该进行标准化。
## 三、算法API
## 四、k的取值
> k的取值会影响k的结果
## 五、实例:预测入住位置。
## 转换器与估计器
> 引入:实例化是一个转换器类,调用fit_transfrom
# 数据的划分和介绍
## 1、sklearn 数据集
### 数据集划分
- 训练集 占大多数 70% 80% 75% 构建模型
- 测试集 30% 20% 25% 用于评估模型是否有效
sklearn.model_selection.train_test_split
## 机器学习算法分类以及开发流程
> 算法是核心,数据和计算是基础
> 找准定位,算法设计是算法工程师在做,我们要分析数据,分析业务,应用常见算法,特征工程,调参数,优化
- 学会分析问题,用算法解决问题
- 掌握算法基本思想
- 利用库和框架解决问题
### 算法分类
1、数据类型
- 离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,不能再细分,也不能进一步地提高精确度。
- 连续型数据:可以在某个范围内取任意数,即变量的取值可以是连续的,如长度时间质量值等。通常是非整数,含有小数部分。
2、 算法分类
1) 监督学习(预测)特征值+目标值
- 分类 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
- 回归 线性回归 岭回归
- 标注 隐马尔科夫模型 不做要求
2) 无监督学习 特征值无标签,无标准答案
- 聚类 k-means
> 分类:目标值离散型 回归:目标值连续型
> 分类概念:分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果。
> 应用:银行业务,图像处理,手写识别,文本分类
例子:
1、明天天气多少度:回归
2、明天天气是阴、晴还是雨:分类
3、人脸年龄预测:回归
4、人脸识别:分类
## 数据降维
> 维度:特征的数量
> 为什么要降维:删除一些不必要的特征
- 特征选择
- 主成分分析
### 特征选择
特征选择的原因
- 冗余:部分特征相关度高,容易消耗计算性能
- 噪声:部分特征对预测结果有影响
特征选择的主要方法
- filter 过滤式 variance threshold
- embedded 嵌入式 正则化、决策树
- wrapper 包裹式
### 过滤式特征选择
sklearn.feature_selection.VarianceThreshold
> 特征之间容易相关 对于高纬度数据来说
n_components:
- 小数 百分比(0~1)保留多少信息 一般取90~95%
- 整数 减少到的特征数量
一般使用小数
sklearn.preprocessing.MinMaxScaler
### 特征的预处理: 对数据进行处理
### 特征预处理的方法
> 通过特定的统计方法,将数据转换成算法要求的数据
数值型数据:标准缩放:
- 归一化
- 标准化
类别型数据:one-hot编码
时间类型:时间的切分
### sklearn特征处理API
- sklearn.preprocessing
### tf_ idf分析
朴素贝叶斯
> tf: term frequency(词的频率) 出现的次数
> idf: 逆文档频率 inverse document frequency 公式:log(总文档数量/该词出现的文档数量)
log() 输入的数值越小,结果越小。
> tf*idf 重要性 用以苹果一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。
sklearn.feature_extraction.text.TfidVectorizer
### 字典特征数据抽取
> 特征抽取:文本,字符串
> sklearn特征抽取API
- 字典特征抽取
sklearn.feature_extraction.Dictvectorizer
### Dictvectorizer语法
DictVectorizer.fit_transform(x)
返回sparse矩阵
### 流程
- 实例化DictVectorizer
- 输入数据并转换 fit_transform()
### 数据对于特征的处理
pandas:一个数据读取非常方便以及基本的处理格式的工具
- 缺失值
- 数据转换
- 重复值 (机器学习中不需要进行去重)
sklearn:对于特征的处理提供了强大的接口
特征工程
> 概念:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性
> 意义:直接影响预测结果
### sklearn
> python语言的机器学习工具
> 机器学习算法的实现
- 数据的特征抽取
- 数据的特征预处理
- 数据的降维