机器学习概要(MACHINE LEARNING SUMMARY)

机器学习概要(MACHINE LEARNING SUMMARY)

监督学习

回归分析与线性回归

1、例如营业额预测,传统算法必须知道计算公式,机器学习可以帮你找到核心的函数关系式,利用它推算未来预测结果;
2、机器学习选股,股票以前信息及涨跌数据,自动找规律推算什么时间买什么股票(股票明天的股价多少)

分类任务与逻辑回归

1、垃圾短信检测(垃圾、正常类别)
2、图像识别,自动图像分类
3、手写数字识别
4、股票涨跌预测(涨跌类别)
5、逻辑回归实现产品分类(尺寸与分类)良次品
6、商业异常消费数据预测(逻辑回归)

决策树

根据求职者的相应技能、工作经验、学历背景和薪资要求判断是否安排面试

朴素贝叶斯

预测学生录取及奖学金情况(基于英语成绩、学生会、实习等特征)

无监督学习

k均值聚类(Kmeans)

数据聚类、k均值聚类实现图像分割最基础的实现方法:灰度阈值分割

异常检测

基于高斯分布的概率密度函数实现异常消费行为检测(信用卡,基于payment、frequency特征)

主成分分析法(PCA)

数据降维,按照一定规律把数据变换到一个小的坐标系统中,使得任何数据投影后尽可能可以分开(新数据尽可能不相关、分布方差最大化)k=2维时方差比例之和占0.3说明损失了很多信息,所以增加k=7,方差比例之和等于0.9,说明主要信息都留存下来了。场景:结合PCA降维技术与逻辑回归预测检查者患病情况
###循环神经网络应用场景:机器翻译、语音识别、行为预测、股价预测

完成分类的方法

1、逻辑回归(核心:逻辑回归方程分开)

2、朴素贝叶斯(核心:计算样本分布概率,结合实际样本分布,预测发生的概率)

贝叶斯公式:核心是在已知一些条件下(部分事件发生),实现对目标事件发生概率更准确的预测。#朴素贝叶斯用于机器学习:基于训练数据集(X,Y)与贝叶斯概率公式,机器学习从输入到输出的概率分布,计算求出使得后验概率最大的类别作为预测输出。

条件概率、全概率、贝叶斯概率的区别

条件概率:A发生的情况下,B发生的概率;
全概率公式:大事件的发生概率可以分组成若干组更简单的事件
贝叶斯公式:利用条件概率和全概率公式计算后验概率

3、决策树(核心是简单的判断)

决策树:一种基于样本分布概率,一树形结构的方式,实现多层判断从而确定目标所属类别

4、KNN近邻(核心是看周边样本的类别,k=3,周边样本数量)

KNN分类(k近邻分类):通过计算新数据与训练数据之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(K个邻居),这K个邻居的多数属于某个类,就把该新样本数据实例分类到这个类中。

5、k均值聚类(Kmeans)

在样本数据空间中选取K个点作为中心,计算每个样本到各中心的距离,根据距离确定数据类别,是聚类算法中最为基础但也最为重要的算法。

机器学习应用场景

数据挖掘(爬虫定位到需要的内容)、机器视觉(应用最广的,比如微信支付宝扫脸支付)、语言理解(翻译)、无人驾驶、机器人(Boston dynamics不管跳跃、翻转动作做的特别好)、病例分析(学习病例图片,预测病人患哪种疾病)

四大方学习法应用场景

监督学习:价格预测、图像识别、语言翻译
无监督学习:(聚类分析)客户划分(找出高价值客户群体,不需要告诉计算机哪一类用户是高价值用户)、图像切割(我只关心很大图片中的局部一部分,帮助我提取出感兴趣的部分)、基因聚类、图像新闻聚类(这一类别的新闻推给我)、数据降维、【异常检测场景:1、工厂监控传感器检测设备异常工作状态(异常点随机出现)2、相机画面异常检测(一大堆红色购物篮出现一个蓝色)3、欺诈检测(盗刷信用卡检测)4、入侵检测(检测网络入侵或计算机入侵行为)5、医疗(缺陷基因检测)6、生态系统(预测飓风、洪水、干旱、热浪和火灾的发生)】(无监督式异常检测:通过寻找与其他数据最不匹配的实例来检测未标记测试数据的异常
)、
半监督学习:混合学习应用(监督+无监督的场景)
强化学习:OpenAi Five(DOTA里的)、AlphaGo
深度强化学习:下围棋、打篮球游戏,本质是深度学习神经网络模型(ANN,MLP,CNN,RNN)+强化学习方法:底层数学原理:马尔可夫链(马尔科夫奖励过程)。模型和学习是不一样的,模型包含KNN、SVM包括线性回归也是一个模型,深度学习虽然带了学习这个词,但是它泛指神经网络模型,就是ANN(Artificial Neural Network)。它的子分类包括MLP(MultilayerPerceptron)多层感知器,CNN(Convolutional Neural Networks)卷积神经网络,RNN(Recurrent Neural Network)循环神经网络,它的特点是比较擅长从数据的底层提取更高维的数据特征,总之就是表现更好、准确度更高、适用性更广泛、需要更少的人为干预;而学习,有了模型往往是不够的,单纯的模型里面的参数都是随机生成的,它是无法满足任何应用的。因此我们要通过已有的数据、并且通过特定的学习方法,让这个模型里的参数获得优化,使他们应用在一个一个具体领域,而这种学习方式就是我们说的机器学习。这里主要的机器学习包括监督学习、非监督学习以及强化学习。如果一个模型是深度学习模型,同时它用强化学习进行训练,用在特定的领域,他就是深度强化学习。不过深度强化学习应用仅在游戏领域比较多。

马尔科夫链Markov chain

类似于区块链,都是一段时间内发生的事情一个链条这么一块,区块链记录了交易信息,马尔科夫链记录了状态信息(决策信息),然后进入下一个状态(下一个环节)。一个环节接着一个环节,而这个环节是有时间顺序的。这种由时间顺序连在一起,记录了一个接一个状态的过程连就被成为马尔科夫链。定义:状态空间中经过从一个状态到另一个状态的转换的随机过程,下一状态的概率分布只能由当前状态决定,且与它前面的时间均无关。#状态转移矩阵#马尔科夫奖励过程:伽马:奖励随着发生时间越远相应的它的价值越低。伽马值越大表示衰减的越慢,表示更在乎长远的利益。#马尔科夫决策过程:强化学习的基本过程。相比马尔科夫奖励过程多了一个动作A。就是下一时刻的状态不仅仅取决于这一时刻的状态,还取决于你当前的行动。(例如下围棋)
典型的马尔科夫链:时间点上是离散的,学习的机器人根据当前的状态和当前的奖励,采取了一个行动,你的行动和环境自身的变化会带来一个新的状态和下一个状态新的奖励,不断地往复,每一次往复相当于链条中新的环节,随着时间不断地往前,一个周期接着一个周期(episode)。
在这里插入图片描述
强化学习的目标就是最大化期望回报,相应的结果就是找到从状态空间S映射到动作空间A的最优策略。

监督学习与无监督学习范围

监督学习:线性回归、逻辑回归、决策树、朴素贝叶斯、KNN
无监督学习:聚类算法、PCA降维、异常检测
监督学习与无监督学习
1、大部分应用场景中,条件允许情况下,优先考虑监督学习
2、部分特定场景,无监督学习能够帮我们找到“惊喜”(预料之外的数据关系)
3、未来的一大方向:监督+无监督,实现少量标签样本下的数据学习,在保证精度的同时极大降低数据采集难度

K均值聚类(Kmeans)与K近邻分类(KNN)

Kmeans:无监督学习;聚类算法、无Label的数据集;计算数据与中心点的距离
KNN:监督学习、分类算法;带Label的数据集;计算数据与其他数据的距离

什么场景下用什么样的技术呢?–逻辑回归、KNN、决策树DC、朴素贝叶斯Bayes

逻辑回归

优点:输出值自然地落在0到1之间,并且有概率意义
参数代表每个特征对输出的影响,可解释性强
实施简单,非常高效(计算量小、储存占用低),可以在大数据场景中使用
缺点:本质上是一个线性的分类器,对于特征相关度高的情况效果不是很好
特征空间很大时,性能不好
适用场景:需要较为清晰的理解每个属性对结果的影响

KNN

优点:简单、易于理解、易于实现、无需评估参数、无需求解训练
适合对稀有时间进行分类;(其他模型可能忽略掉了)
在多分类场景中也不会增加训练负责度,特别适合多分类问题
缺点:懒惰算法,对测试样本分类时计算量大,需要扫描所有训练样本,内存开销大,评分慢
完全跟着数据走,没有数学模型可言,无法检查不同属性对结果的影响
当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量的样本占多数
适用场景:需要一个特别容易解释的模型的时候,比如需要向用户解释原因的推荐算法

决策树

优点:计算量小,运算速度快(if else)
判断步骤清晰,易于理解
缺点:忽略了属性间的相关性
样本分布不均匀时,容易影响模型的表现(一个类别50,一个类别2,信息熵就会有一个不平衡的现象)
应用场景:需要清晰的描述类别判断的前后逻辑(先依据哪个指标判断,接下来使用哪个指标)

朴素贝叶斯

优点:源于古典数学理论,分类逻辑清晰
可清晰查看类别对应的概率,观察数据改变的概率变化,帮助理解预测过程
缺点:在属性个数比较多或者属性之间相关性较大时,分类效果不好(因为本身就假设属性间独立的)
对先验概率依赖度高,样本类别分布不均匀时,容易影响模型表现
适应场景:数据不同维度之间相关度较小
#还有其他模型:SVN支持向量机、深度学习全连接神经网络

模型评估

过拟合

原因:使用了过于复杂的模型结构(比如高阶决策边界);训练数据不足,有限的训练数据(训练样本准有样本中的小部分、不具备代表性);样本里的噪音数据干扰过大,模型学到了噪音信息(使用过多与结果不相关属性数据)
解决办法
简化模型结构(降低模型复杂度,能达到好的效果情况下尽可能选择简单的模型);
数据增强(按照一定的规则扩充样本数据);
数据预处理,保留主成分信息(数据PCA处理);
增加正则化项(regularization):#增加正则项:在损失函数中增加额外项,实现对求解参数的数值约束,防止模型过拟合。能对某一些对模型影响很大的参数实现约束,从而减少过拟合现象发生的效果#Ridge回归正则项:西塔平方;Lasso回归正则项:西塔绝对值

准确率作为模型评估指标的局限性

高档消费客户只是很小比例,所以预测所有用户都非高档用户,也能达到准确率95%。
样本分布不均匀,占比大的类别会成为影响准确率的主要原因。表现:没有体现数据子类别的预测效果(如0、1分别预测的准确率);没有体现模型错误预测的类型(如5%的错误率是什么类别预测错误)

混淆矩阵

也称误差矩阵,用于统计个类别样本预测正确与错误的数量,能帮助养护更全面的评估模型表现
TP:True Positives
TN:True Negatives
FP:FALSE Positives
FN:False Negatives
在这里插入图片描述
准确率Accuracy:(TP+TN)/(TP+TN+FP+FN)总样本中,预测正确的比例
错误率Misclassification Rate:(FP+FN)/(TP+TN+FP+FN)总样本中,预测错误的比例
召回率Recall:TP/(TP+FN)正样本中,预测正确的比例
特异度Specificity:TN/(TN+FP)负样本中,预测正确的比例
精确率Precision:TP/(TP+FP)预测结果为正样本中,预测正确的比例
F1分数F1 Score:2PrecisionRecall/(Precision+Recall)综合Precision和Recall的指标

模型的建立与优化

模型表现不好,从前往后找问题:数据是否有问题、算法选的是否合适、核心结构与参数是否合理
在这里插入图片描述

数据质量决定模型表现的上限

上游决定下游,建模前五检查:
1、样本代表性:采集数据的方法是否合理,采集到的数据是否有代表性
2、标签统一化:对于样本结果,要确保每个样本都遵循一样的标签规则
3、数据合理性:样本中的异常数据点是否合理、如何处理
4、数据重要性:数据属性的意义,是否为无关数据
5、属性差异性:不同属性数据的数量级差异性如何(重要数据10000万与10000个)

尝试以下方法

1、根据实际场景扩充或减少样本 -->数据质量提升,有助于提高模型表现
2、对不合理标签进行预处理(两个师傅打标签,让他们讨论并确定一个统一的标准) -->帮助模型学习到正确信息(合理的监督)
3、删除不重要的属性数据、数据降维 -->降低噪音影响,减少过拟合、节约运算时间
4、对数据进行归一化或标准化 -->平和数据影响,加快训练收敛
5、过滤掉异常数据 -->降低噪声影响、提高鲁棒性
在这里插入图片描述

scikit-learn:是针对机器学习应用而开发的算法库

编程语言是python
常用功能:数据预处理、分类、回归、降维、模型选择等常用的机器学习算法
三大优点:丰富的算法模块(比如分类【朴素贝叶斯、决策树,SEM等】、回归);易于安装与使用;阳历丰富、教程文档详细
可去官网查看社区支持

1、线性回归模型

from sklearn.linear_model import LinearRegression
model = LinearRegression()
#生成二阶属性数据
from sklearn.preprocessing import PolynomialFeatures
poly2 = PolynomialFeatures(degree=2)
X_2_train = poly2.fit_transform(X_train)
X_2_test = poly2.transform(X_test)
#生成六阶属性数据
from sklearn.preprocessing import PolynomialFeatures
poly6 = PolynomialFeatures(degree=6)
X_6_train = poly6.fit_transform(X_train)
X_6_test = poly6.transform(X_test)

2、逻辑回归实现产品分类(尺寸与分类)

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X,y)

3、决策树求解

三种求解方法:ID3、C4.5、CART。通常用ID3:利用信息熵原理选择信息增益最大的属性作为分类属性,一次确定决策树的分枝,完成决策树的构造

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='entropy',min_samples_leaf=5) #entropy信息熵增益的方式;min_samples_leaf分枝以后的最小样本数量
model.fit(X,y)

4、朴素贝叶斯模型

from sklearn.naive_bayes import CategoricalNB  #CategoricalNB实现多类别分类的朴素贝叶斯
model = CategoricalNB()
model.fit(X,y)

5、KMeans模型(k均值聚类)

from sklearn.cluster import KMeans
KM = KMeans(n_clusters=2,init='random',random_state=0)  #随机的生成开始的中心点;random_state=0随机的结果可重复,下次训练时可以得到同样的结果
KM.fit(X)

6、计算基于高斯分布的概率密度函数进行异常检测

from scipy.stats import norm
x1_range = np.linspace(0,10,300)
x1_normal = norm.pdf(x1_range,x1_mean,x1_sigma)
#综合高斯分布概率密度函数的可视化
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
fig5 = plt.figure()
axes3d = Axes3D(fig5)
axes3d.plot_surface(xx,yy,p_2d,cmap=cm.rainbow)

在这里插入图片描述

#建立异常检测模型
from sklearn.covariance import EllipticEnvelope   #高斯分布检测异常的函数
model = EllipticEnvelope(contamination=0.03) #异常样本的比例
model.fit(X)

7、PCA:

#逻辑回归模型
from sklearn.linear_model import LogisticRegression
model1 = LogisticRegression(max_iter=1000) #最大迭代次数设为1000,可以找到最小的损失函数
model1.fit(X,y)
#数据的标准化***
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)
#pca分析
from sklearn.decomposition import PCA  #decomposition降维的模块
pca = PCA(n_components=8)  #分析到8个维度
X_pca = pca.fit_transform(X_norm)
#计算分析后各成分的方差以及方差比例
var = pca.explained_variance_
var_ratio = pca.explained_variance_ratio_ #方差比例,了解多少的有信息被保留下来了
print(var)
print(var_ratio)
print(sum(var_ratio))
#降维后的模型建立与训练
model2 = LogisticRegression()
model2.fit(X_pca,y)

8、KNN

#数据分离**
from  sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=1,test_size=0.4)
print(X_train.shape,X_test.shape,X.shape)
#建立knn模型 k=3
from sklearn.neighbors import KNeighborsClassifier
knn_3 = KNeighborsClassifier(n_neighbors=3)
knn_3.fit(X_train,y_train)
#计算混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_test_predict)
print(cm)
#获取混淆矩阵元素
TP = cm[1,1]
TN = cm[0,0]
FP = cm[0,1]
FN = cm[1,0]
print(TP,TN,FP,FN)
accuracy = (TP+TN)/(TP+TN+FP+FN)
print(accuracy)
recall = TP/(TP + FN)
print(recall)
specificity = TN/(TN + FP)
print(specificity)
precision = TP/(TP + FP)
print(precision)
f1 = 2*precision*recall/(precision+recall)
print(f1)



##注意事项
#格式与维度的转化
print(X_train.shape)
X_train = np.array(X_train)
X_train = X_train.reshape(-1,1)
print(X_train.shape)
X_test = np.array(X_test).reshape(-1,1)
print(X_test.shape)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值