文章目录
一、人工智能概述
1.1 人工智能、机器学习和深度学习之间的关系
1956年 人工智能元年
- 机器学习是人工智能的一个实现途径
- 深度学习是机器学习的一个方法
1.2 机器学习的应用领域
- 挖掘、预测
- 图像识别
- 自然语言处理
二、机器学习
2.1 定义
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。
- 数据
- 模型
- 预测
2.2 数据集构成
由 特征值 + 目标值 构成
每一行数据称之为一个样本
有的数据集可以没有目标值
2.3 机器学习中的算法分类
根据目标值分类
- 监督学习
- 目标值:类别 = 分类问题(离散)
- 目标值:连续型的数据 = 回归问题
- 无监督学习
- 目标值:无 = 无监督学习
机器学习分类
- 监督学习
- 分类:预测天气阴晴雨、人脸识别
- 回归:预测天气温度、预测房价
- 无监督学习
- 聚类
算法分类
- 分类:k-近邻算法、贝叶斯算法、决策树与随机森林、逻辑回归
- 回归:线性回归、岭回归
- 聚类:k-means
2.4 机器学习的开发流程
- 获取数据
- 数据处理
- 特征工程
- 机器学习算法训练 - 模型
- 模型评估
- 应用
2.5 学习框架和资料介绍
- 算法是核心,数据与计算是基础
- 目前学习的定位:复杂的算法设计是算法工程师在做
- 分析数据
- 分析具体的业务
- 学习常见的算法
- 特征工程、调整参数、优化
库和框架
- Sklearn - 传统机器学习
- Google - Theano - Tensorflow 深度学习流行框架
- Pytorch
- Caffe2
- Chainer
2.6 数据集
数据集分为:
- 训练集
- 测试集
可用数据集
- 公司内部
- 数据接口
学习阶段:可用数据集
- Scikit-learn
- Kaggle
- UCI
Scikit-learn介绍
- Python语言的机器学习工具
- 包含许多知名机器学习算法
- 文档完善,易于上手
1. Sklearn安装
pip install numpy #NumPy系统是Python的一种开源的数值计算扩展
pip install scipy #Scipy是一个高级的科学计算库
pip install sklearn
2. API介绍
- 获取数据集
sklearn.datasets.load_*() #获取小规模数据集
sklearn.datasets.fetch_*(data_home=None, subset='all') #获取大规模数据集
数据集的返回值:datasets.base.Bunch(字典格式)
- data
- target
- DESCR
- feature_name
- target_name
- 划分数据集
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 获取数据集
iris = load_iris()
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
2.7 特征工程
为什么需要特征工程
数据和特性决定了机器学习的上限,而模型和算法只是逼近这个上限而已
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
意义:会直接影响机器学习的效果
特征工程包含的内容
- 特征抽取
文本 - > 数字特征
图像 - > 数字特征
方法:字典特征提取、文本特征提取、图像特征提取(深度学习) - 特征预处理
- 特征降维
字典特征提取
one-hot编码
布尔列
稀疏矩阵
节省内存空间,one-hot编码中零多,所以只标注非零的地方。
sklearn.feature_extraction.DictVectorizer(sparse=True)
#vector 数学:向量 | 物理:矢量
#matrix 二维数组
#vector 一维数组
#sparse 稀疏矩阵
DictVectorizer.fit_transform(X)
# X 字典或者包含字典的迭代器返回值
# 返回sparse矩阵:非零值用按位置表示出来
DictVectorizer.inverse_transform(X)
# X array数组或者sparse矩阵
# 返回转换前的数据格式
DictVectorizer.get_feature_names()
# 返回类别名称
from sklearn.feature_extraction import DictVectorizer
transfer = DictVectorizer()
data={}
data_new = transfer.fit_transform(data)
feature_names = transfer.get_feature_names()
应用场景
- 数据集的类别特征比较多
- 本身拿到的数据就是字典类型
文本特征提取
方法一
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
#停用词
data = ""
tranfer = CountVectorizer()
#稀疏矩阵
data_new = transfer.fit_transform(data)
#正常矩阵
data_new.toarray()
对于中文需要使用分词库
方法二
TF-IDF
term frequency, tf 词频
inverse document frequency, idf 逆向文档频率
tf-idf = tf * idf
tranfer = TfidfVectorizer()
data_new = transfer.fit_transform(data)
特征预处理
将特征数据转化为更为适合算法模型的特征数据。
实现特征数据的无量纲化:归一化、标准化。
解决量纲不统一,使不同规格的数据转化到同一个规格。
归一化
sklearn.preprocessing.MinMaxScaler(feature_range(0,1)...)
MinMaxScaler.fit_transform(data)
标准化
在归一化中如果有异常值(最大最小值)的时候会受到影响,鲁棒性差。
均值为0,标准差为1的附近
标准差:集中程度
sklearn.preprocessing.StandarScaler()
MinMaxScaler.fit_transform(data)
特征降维
降低特征(随机变量)的个数,得到一组不相关的主变量的过程
- 特征选择
- 主成分分析
特征选择
Filter(过滤式):方差选择法、相关系数法
Embedded(嵌入式):决策树、正则化、深度学习
- 相关系数
皮尔逊相关系数
r>0 正相关
r<0 负相关
0 则表示无关
主成分分析(PCA)
2.8 分类算法
转换器和预估器
转换器 Transformer
1)实例化转换器
2)调用fit_transform()方法:fit()和transform()
预估器 Estimator
sklearn中的预估器
用于分类
sklearn.neighbors
sklearn.naive_bayes
sklearn.linear_model.LogisticRegression
sklearn.tree
用于回归
sklearn.linear_model.LinearRegression
sklearn.linear_model.Ridge
用于无监督
sklearn.cluster.KMeans*
1)实例化预估器
2)调用fit()方法获取模型
3)使用score(text_x, text_y)、predict()评估模型
1. K近邻分类算法(kNN,k-NearestNeighbor)
k=1 易受到异常值的影响,k值过大会受到样本不均匀的影响。
k值一般为奇数
欧式距离
曼哈顿距离
明可夫斯基距离
模型选择与调优:
A)交叉验证(Cross Validation)
四则交叉验证
B)网格搜索(Grid Search)
sklearn.model_selection.GridSearchCV(estimator, params, CV)
2. 朴素贝叶斯分类
贝叶斯公式
概率:事件发生的可能性
联合概率P(A,B)
条件概率P(A|B)
若P(A,B)=P(A)*P(B),则称A、B事件相互独立
朴素:就是假定特征与特征之间相互独立
应用场景:文本分类
拉普拉斯平滑系数:解决概率为0的问题
缺点:特征必须独立
3. 决策树
如何高效的进行决策
信息论:信息增益=信息熵-条件熵
熵 = 不确定性
熵下降最快(梯度下降)
条件熵
信息增益:根据信息增益选取特征
什么是信息?
香农:消除随机不确定性的东西
树的深度:拟合、泛化
解决过度拟合:
1. 截枝cart算法
2. 随机森林
优势:可视化、解释能力强
4. 随机森林
集成学习方法
生成多个模型,各独自学习结合为组合预测。
随机包括:
训练集随机:bootstrap随机有放回抽样
特征随机
森林:多个决策树
5. 逻辑回归(分类算法)
Logistic Regression 与回归有一定的联系,但是是分类模型。
应用场景
- 广告点击率
- 是否为垃圾文件
- 是否患病
- 金融诈骗
- 虚假账号
以上都属于二分类
sigmoid函数
精确率与召回率
混淆矩阵
TP True Positive
FN False Negative
精确率
召回率
F1-score
ROC曲线和AUC指标
TPR:召回率
FPR:
2.9 回归算法
1. 线性回归
欠拟合
过拟合
线性模型
线性关系
损失函数
优化方法:
- 正规方程 - 直接求出
- 梯度下降 - 不断优化
GD(Gradient Descent)
SGD(Stochasitc Gradient Descent)随机梯度下降
SAG(Stochasitc Average Gradient)随机平均梯度法:岭回归、逻辑回归
回归性能评估
# 模型评估
from sklearn.metrics import mean_squared_error
y_predict = estimator.predict(x_test)
error = mean_squared_error(y_test, y_predict)
欠拟合和过拟合
学习特征少 - 欠拟合
学习特征太多 - 过拟合、泛化能力差
如何解决
欠拟合:增加特征数量
过拟合:存在嘈杂特征,正则化
L1正则化:
损失函数 + 系数 * 惩罚项(LASSO)
会使得其中某一些的W值直接为零
L2正则化(常用):
会使得其中某一些的W值很小,削弱某个特征的影响
损失函数 + 系数 * 惩罚项(Ridge)(使得权重整体也变小)
2. 岭回归
带L2正则化的线性回归就叫做岭回归,为了解决过拟合问题。
模型保存
K-Means
无监督学习:没有目标值
轮廓系数