【每日一问】
如何实践完整的数据挖掘项目?
机器学习项目
1抽象为数学问题(明确的问题) ) ) ) ) ) ) )。
2获取数据
3特征预处理与特征选择
4培训模式和培训
5模型诊断
6模型融合(非必需) ) ) ) ) )。
7在线运行
大多数机器学习项目在第一步和第二步中死亡。 平时我们说的机器学习,是指三、四、五三个步骤。 在实践中,其实最难的是业务理解这一步,业务理解可以。 后面的一切都有章可循。
NLP项目
1获取词汇
现有资料:业务部门、公司积累了大量的文本数据
在网上下载、捕获资料:让爬虫自己捕获和加工数据。
2词汇预处理
数据预处理约占50%-70%的工作量,通过数据清洗、分词、词性标注、单词禁用四大方面完成数据预处理。
a )词汇清洗)是从词汇中找出我们感兴趣的东西,清洗删除把不感兴趣的东西视为干扰的内容。 例如,对于已爬网的网页内容,必须删除广告、标记、HTML、JS等代码和注释等。 B .分词:中文词汇数据是由句子、文章摘要、段落、整篇文章组成的类似短文本或长文本。 一般句子、段落间的字、词是连续的,有一定的意义。 c .词性标注:对形容词、动词、名词等各词或词进行词性标注。 这样,文本在以后的处理中可以吸收更多有用的语言信息。 例如,常见的文本分类不需要在意词性问题,但需要情感分析、知识推理等东西的d .使词无效:无效词一般是指标点符号、语气、人称等对文本特征没有任何贡献的单词。 因此,在一般的文本处理中,分词后下一步是禁用词。 但是,例如在感情分析中,应该保留语气、感叹号。 因为他们对表达语气的程度、感情的颜色有一定的贡献和意义。 3特征工程
词汇预处理完成后,接下来需要考虑分词后的字和词如何表示为计算机可以计算的类型。 将汉语分词字符串转换为数字有两种常见的表达模式,分别是词袋模型和词向量。
词袋模型(Bag of Word,BOW ),即不考虑词在句子中的顺序,计数词数是最基本的方法,TF-IDF是词袋模型的典型用法。
词向量是将词、词转换为向量矩阵的计算模型。 迄今为止最常用的词语表达方式是One-hot,该方法将各词语表示为长向量。 此向量的维是同义词大小,其中大多数元素为0,只有一个维的值为1,该维表示当前词。 还有谷歌团队的Word2Vec。 主要包括两种模式。 Skip-Gram )和Continuous Bag of Words )。 Word2Vec单词向量可以很好地表达不同单词之间的相似和类比关系。 另外,还有Doc2Vec、WordRank、FastText等单词向量的表现方法。
4特征选择
结构良好的特征向量是选择合适的表现力高的特征。 文本特征一般是词语,具有语义信息,使用特征选择可以找到特征的子集,并可以保留语义信息; 但是,由特征提取发现的特征子空间,丢失了一部分语义信息。 因此,特征选择是一个非常困难的过程,往往依赖于经验和专业知识,并且有很多现成的算法来进行特征选择
5模特训练
特征向量选择完成后,接下来是训练模型。 对于不同的应用需求,我们使用不同的模型。 传统的KNN、SVM、朴素贝叶斯、决策树、GBDT、k均值等机器学习模型; 深度学习模型例如是CNN、RNN、LSTM、Seq2Seq、快速文本、文本CNN等。 这些模型用于后续分类、聚类、神经序列、情感分析等例子。
模型训练中应注意的问题:
1 .注意过拟合、欠拟合问题,提高模型泛化能力。 2 .关于神经网络,要注意坡度消失和坡度爆炸的问题。 6评价指标
训练的模型在上线前对模型进行必要的评估,目的是提高模型对数据的泛化能力。 具体可以参考以下指标。
错误率、精度、正确率、精度、再现率、F1测量。
错误率:分类错误的样本数占样本总数的百分比。
精度:分类正确的样本数占样本总数的比例。
命中率:是针对我们的预测结果说的,说明了在正和预测的样本中,有多少是真正的正样本。
精度:分类正确的样本数占样本总数的比例。
召回率:是针对我们原来的样品。 这表明样品中的正例预计有多正确。
F1测定:对比对率/比对率的偏好不同。
7机型上线
在线应用模型,在线培训模型,在线部署模型,并将其发布为界面服务,以便在业务系统中使用。
【每日一问】
什么是KNN算法? 优缺点是什么?
k最近邻算法
如果特征空间中的k个最相似(即,特征空间中最接近的大部分样本属于某一类别),则该样本也属于该类别。
算法过程:
计算测试样本与各训练样本之间的距离; 重新排序并选择前k个训练样本; 确定前k个训练样本各类别的出现频率,频率最高
的分类作为预测分类优点:
理论成熟,思想简单,既可以用来做分类又可以做回归可以用于非线性分类训练时间复杂度比支持向量机之类的算法低和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量比较小的类域采用这种算法比较容易产生误分类情况缺点:
计算量大,尤其是特征数非常多的时候样本不平衡的时候,对稀有类别的预测准确率低KD树,球树之类的模型建立需要大量的内存是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢相比决策树模型,KNN模型的可解释性不强经验:
k值设定为多大?
k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根
类别如何判定最合适?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。
如何选择合适的距离衡量?
thdse对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。
训练样本是否要一视同仁?
在训练集中,有些样本可能是更值得依赖的。
可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。
性能问题?
kNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找k个近邻)。
懒惰的后果:构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。
已经有一些方法提高计算的效率,例如压缩训练样本量等。
能否大幅减少训练样本量,同时又保持分类精度?
浓缩技术(condensing)
编辑技术(editing)
【每日一问】
在python 中,数组list和元组tuple的作用和区别是什么?
概念解释
List
Tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,因此,没有append(),insert()这样的方法.只有1个元素的tuple定义时必须加一个逗号,,来消除歧义.可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素.相同点与不同点
相同点
元组tuple与列表List都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作。
不同点
不可变与可变:两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是【tuple是不可变类型】,大小固定,而 【list 是可变类型】、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。同样大小的数据,tuple 占用的内存空间更少tuple 对象还可作为字典的键列表一般用于存储同构数据,同构数据就是具有相同意义的数据。元组主要用于异构数据,数据库操作中查询出来的记录就是由元组构成的列表结构。具体解释
python当时的创造者提到过要将元组看作是简单对象的组合,而把列表看作是随时间改变的数据结构;元组的不可变性提供了某种完整性,确保程序中不会被其他引用所修改;元组可以用到一些列表无法使用的地方,比如元组可以作为字典键来表示稀疏矩阵。一般来说,列表是对有时需要修改的定序集合工具,而其他需要处理固定关系的情况需要用元组