1.布雷格曼散度:是一种类似距离度量的方式,用于衡量两者之间差异的大小。Bregman
散度是损失或者失真函数。考虑如下情况:设点是点的失真或者近似的点,也就是说可能是由添加了一些噪声形成的,损失函数的目的是度量用近似近似导致的失真或者损失,因而Bregman散度可以用作相异性函数。
2.挖掘方向:
- 内容挖掘:用户信息:(界面内容挖掘)
- 结构挖掘:网页的先后顺序拓扑结构(界面的超链接挖掘)
- 使用挖掘:使用情况-->用户的访问模式和知识(日志、用户注册信息),提高站点的质量
3.日志信息挖掘的基本过程:
- web服务器日志
- Error Logs
- Cookies(用户名和密码)在浏览器中:
(一)关联分析
(二)分类和预测
(三)聚类分析
(四)序列模式(演变算法):找出页面依照时间顺序出现的内在模式、趋势分析、访问模式分析
(五)统计学分析
4.基本实现过程:
- 预处理
- 模式发现
- 模式分析:评估挖掘出来的模式(应用领域:生物医学数据挖掘与DNA分析、针对金融数据分析的数据挖掘、零售业中的数据挖掘)
目的:挖掘容易,结果有效
欺骗检测:利用对罕见事件进行孤立点分析而得到的结果
聚类分析、孤立点分析:
- 基于统计的孤立点检测
- 基于距离的孤立点检测(基于索引的算法,嵌套-循环算法,基于单元的算法)
- 基于偏离的孤立点检测(序列异常技术,OLAP数据立方体技术)
5.数据获取:
- 爬虫乱码处理:
(request.get(resqponse.url).content.decode(“gbk”,“ignore”)
Response = urllib.request.urlopen(url)
Html = response.read()
Encode = chardet.detect(html)[“encoding”]
If encode = “GB2312”
Encode = “GBK”
提取html (固定标签)
Soup= Beautifulsoup(html,’html.parser’)
Re.search(r’’)
- API
- 数据库
- 自上传
数据清洗:
- 合并:重叠数据合并(pandas数据统计包)
- 数据重叠和轴向旋转(行与列之间索引转换)
- 数据转换:数据的格式转换
- 替换值
- 数据手段
- 排列和采用
- 使用断言
- 断点清洗
- 在一部分数据上进行测试
- 把清洗日志打印到文件中,把原始数据一并存储下来
- 验证清洗后的数据
6.处理空缺值:比较有效的有4、5、6
- 忽略元组:但有时忽略掉则对后面的影响巨大
- 人工填写空缺值:(最精确)但工作量,可行性低
- 使用全局变量填充空缺值:比如:unknown 或者 无穷(不能很好的算法适应或者不认)
- 使用属性的平均值填空缺值:易以偏概全
- 使用与给定元组属同类的所有样本的平均值(更具有参考意义)
- 使用最可能的值填空缺值:使用像Bayesian公式或判定树这样的基于推断的方法(比较困难)
7.处理噪声数据:简单统计量分析(最大,小值),3&原则(若数据服从正态分布,异常数据就是超过3倍标准差的值),箱型图分析(以四分位数和四分卫距为基础具有一定的鲁棒性,多达25%的数据可以变得任意远而不会很大的扰动四分位数,所以异常值不能对这个标准施加影响)一致性分析:数据集成的过程中,可能来自不同的数据源
- 分箱:首先排序数据,并将它们分到等深的箱中,后按平均值,中值边界平滑
- 聚类:监测并且去除孤立点
- 计算机和人工检查结合:有人工干预:就产生偏向性
- 回归:通过让数据适应回归函数来平滑
数据集成:处理数据冗余
- 相关性分析可以检测到
- 仔细将多个数据源中的数据集成起来
8.数据变换:
- 平滑
- 聚集
- 数据概化
- 规范化:将数据映射到小的子空间(最小-最大规范化、z-score、小数定标规范化)
- 属性构造
9.数据归约:减省挖掘时间,提高效率
- 数据立方体聚集:顶层越小越概化,基本的底层的方体,对方体的预计算
- 维归约:删除不相关属性,重复维
- 数据压缩:HMP4、有损、无损、字符
- 数值归约:用参数来表示原来的数据集
- 离散化和概念分层产生
- 用计算机来归约:启发式(探索性)方法:(逐步向前选择、逐步向后选择、向前向后相结合、判定归纳树)
- 直方图:比较流行数据归约技术
- 聚类
- 选样
10.离散化:
- 将连续属性的范围划分为区间
- 有效的归约数据(基于判定树的分类挖掘)
- 概念分层:通过使用高层的概念来替代底层的属性值(实际的年龄)eg:年龄,青年,中年,老年。分箱、直方图分箱、聚类分析、基于熵的离散化、通过自然划分分段:3-4-5规则
数据存储:json 、CSV文件、mysql(直观)、Redis(取出的是二进制,需要转化为字符串再操作)、MongDB(优点:不在乎数据结构,注意取出来的时候写个脚本整理一下)
可视化:R、PowerBI、Python(plotly)、词云生成器
11.数据挖掘系统:KDD,BI(用数据挖掘原语指导数据挖掘系统(挖掘目标等))
- 为了解决特征数字化出现数字的歧义。eg:2是1的2倍往往会使用单热编码,把每个分类转换成一个稀疏的向量,除编号应对应位置,其他都是0
- 对于有大量唯一值的分类型特征来说,将特征哈希化,此方法相较于单热编码,提供了更低的稀疏度和更高的压缩度。
- OLAP:事实维度表和..维表
- 特征工程
(一).特征选择
1.过滤法,通过信息按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适特征(
方差筛选(sklearn中的VarianceThreshold类)
相关系数(主要用于输出连续值的监督学习算法中。我们分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。))
假设检验(卡方检验(检验某个特征分布和输出值分布之间的相关性,临界概率可以合理又科学的筛选异常用户)
F检验和t检验(F检验的函数f_classif和f_regression,分别在分类和回归特征选择时使用))sklearn使用chi2这个类
互信息,即从信息熵的角度分析各个特征和输出值之间的关系评分(sklearn中,可以使用mutual_info_classif(分类)和mutual_info_regression(回归)来计算各个输入特征和输出值之间的互信息)
***优先使用卡方检验和互信息来做特征选择***
2.包装法,根据目标函数,通常是预测效果评分,每次选择部分特征,或者排除部分特征
递归消除特征法(SVM-RFE算法)使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。在sklearn中,可以使用RFE函数来选择特征。
3.嵌入法,使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。类似于过滤法,但是它是通过机器学习训练来确定特征的优劣,而不是直接从特征的一些统计学指标来确定特征的优劣
嵌入法也是用机器学习的方法来选择特征,但是它和RFE的区别是它不是通过不停的筛掉特征来进行训练,而是使用的都是特征全集。在sklearn中,使用SelectFromModel函数来选择特征
递归消除特征法。用的L1正则化和L2正则化来选择特征的基学习器是逻辑回归。(决策树或者GBDT)
4.寻找高级特征(聚类的时候高级特征尽量少一点,分类回归的时候高级特征适度的多一点。)
(二).特征表达
1.缺失值处理(sklearn中,可以使用preprocessing.Imputer来选择这三种不同的处理逻辑做预处理)
连续值:选择所有有该特征值的样本,然后取平均值,来填充缺失值,另一种是取中位数来填充缺失值
离散值:一般会选择所有有该特征值的样本中最频繁出现的类别值,来填充缺失值
2.特殊的特征处理
时间原始特征:
第一种是使用连续的时间差值法,即计算出所有样本的时间到某一个未来时间之间的数值差距,这样这个差距是UTC的时间差,从而将时间特征转化为连续值。
第二种方法是根据时间所在的年,月,日,星期几,小时数,将一个时间特征转化为若干个离散特征,这种方法在分析具有明显时间趋势的问题比较好用。
第三种是权重法,即根据时间的新旧得到一个权重值。比如对于商品,三个月前购买的设置一个较低的权重,最近三天购买的设置一个中等的权重,在三个月内但是三天前的设置一个较大的权重。
地理特征:
如果是处理成离散值,则需要转化为多个离散特征,比如城市名特征,区县特征,街道特征等。但是如果我们需要判断用户分布区域,则一般处理成连续值会比较好,这时可以将地址处理成经度和纬度的连续特征。
3.离散特征的连续化处理
有很多机器学习算法只能处理连续值特征,不能处理离散值特征,比如线性回归,逻辑回归等.这时将离散特征连续化处理
方法:
1.独热编码one-hot encoding sklearn的OneHotEncoder可实现(比如某特征的取值是高,中和低,那么我们就可以创建三个取值为0或者1的特征,将高编码为1,0,0这样三个特征,中编码为0,1,0这样三个特征,低编码为0,0,1这样三个特征)
2.特征嵌入embedding:可以用tf.nn.embedding_lookup找到该用户的特征嵌入向量。特征嵌入矩阵会在反向传播的迭代中优化。
在自然语言处理中,我们也可以用word2vec将词转化为词向量
4. 离散特征的离散化处理:sklearn的LabelEncoder将其转化为0,1,2,...这样的类别标签值。
独热编码one-hot(推荐)
虚拟编码dummy coding
5. 连续特征的离散化处理:特征变得高维稀疏
LR+GBDT的经典模型中,就是使用GDBT来先将连续值转化为离散值
(三).特征预处理
1. 特征的标准化和归一化
特征的标准化和归一化
max-min标准化:
L1/L2范数标准化:在sklearn中,我们可以用Normalizer来做L1/L2范数标准化
虽然大部分机器学习模型都需要做标准化和归一化,也有不少模型可以不做做标准化和归一化,主要是基于概率分布的模型,比如决策树大家族的CART,随机森林等。当然此时使用标准化也是可以的,大多数情况下对模型的泛化能力也有改进。
2. 异常特征样本清洗
聚类
异常点检测方法,主要是使用iForest或者one class SVM
3. 处理不平衡数据
权重法:对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重就高。如果更细致点,我们还可以对每个样本加权重sample weight,思路和类别权重也是一样,即样本数多的类别样本权重低,反之样本权重高。sklearn中,绝大多数分类算法都有class weight和 sample weight可以使用。
采样法:对类别样本数多的样本做子采样,对类别样本数少的样本做过采样
上述两种常用的采样法很简单,但是都有个问题,就是采样后改变了训练集的分布,可能导致泛化能力差。所以有的算法就通过其他方法来避免这个问题,比如SMOTE算法通过人工合成的方法来生成少类别的样本。
得到不改变训练集分布的新样本,让训练集中各个类别的样本数趋于平衡。我们可以用imbalance-learn这个Python库中的SMOTEENN类来做SMOTE采样。
原文地址:https://www.cnblogs.com/lgx-fighting/p/9372790.html