码迷,mamicode.com
首页 > 其他好文 > 详细

数据挖掘方法

时间:2018-07-26 18:51:03      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:好的   大小   通过   导数   unknown   金融数据分析   全局   enc   创建   

1.布雷格曼散度是一种类似距离度量的方式,用于衡量两者之间差异的大小。Bregman

散度是损失或者失真函数。考虑如下情况:设点是点的失真或者近似的点,也就是说可能是由添加了一些噪声形成的,损失函数的目的是度量用近似近似导致的失真或者损失,因而Bregman散度可以用作相异性函数。

2.挖掘方向:

  1. 内容挖掘:用户信息:(界面内容挖掘)
  2. 结构挖掘:网页的先后顺序拓扑结构(界面的超链接挖掘)
  3. 使用挖掘:使用情况-->用户的访问模式和知识(日志、用户注册信息),提高站点的质量

3.日志信息挖掘的基本过程:

  1. web服务器日志
  2. Error Logs
  3. Cookies(用户名和密码)在浏览器中:

(一)关联分析

(二)分类和预测

(三)聚类分析

(四)序列模式(演变算法):找出页面依照时间顺序出现的内在模式、趋势分析、访问模式分析

(五)统计学分析

4.基本实现过程:

  1. 预处理
  2. 模式发现
  3. 模式分析:评估挖掘出来的模式(应用领域:生物医学数据挖掘与DNA分析、针对金融数据分析的数据挖掘、零售业中的数据挖掘)

目的:挖掘容易,结果有效

欺骗检测:利用对罕见事件进行孤立点分析而得到的结果

聚类分析、孤立点分析:

  1. 基于统计的孤立点检测
  2. 基于距离的孤立点检测(基于索引的算法,嵌套-循环算法,基于单元的算法)
  3. 基于偏离的孤立点检测(序列异常技术,OLAP数据立方体技术)

5.数据获取:

  1. 爬虫乱码处理:

request.get(resqponse.url.content.decode(“gbk,ignore”)

Response = urllib.request.urlopenurl

Html = response.read()

Encode = chardet.detecthtml[“encoding”]

If encode = “GB2312”

Encode = “GBK”

提取html (固定标签)

Soup= Beautifulsouphtml,’html.parser’

Re.search(r’’)

  1. API
  2. 数据库
  3. 自上传

数据清洗:

  1. 合并:重叠数据合并(pandas数据统计包)
  2. 数据重叠和轴向旋转(行与列之间索引转换)
  3. 数据转换:数据的格式转换
  4. 替换值
  5. 数据手段
  6. 排列和采用
  7. 使用断言
  8. 断点清洗
  9. 在一部分数据上进行测试
  10. 把清洗日志打印到文件中,把原始数据一并存储下来
  11. 验证清洗后的数据

6.处理空缺值:比较有效的有456

  1. 忽略元组:但有时忽略掉则对后面的影响巨大
  2. 人工填写空缺值:(最精确)但工作量,可行性低
  3. 使用全局变量填充空缺值:比如:unknown 或者 无穷(不能很好的算法适应或者不认)
  4. 使用属性的平均值填空缺值:易以偏概全
  5. 使用与给定元组属同类的所有样本的平均值(更具有参考意义)
  6. 使用最可能的值填空缺值:使用像Bayesian公式或判定树这样的基于推断的方法(比较困难)

7.处理噪声数据:简单统计量分析(最大,小值),3&原则(若数据服从正态分布,异常数据就是超过3倍标准差的值),箱型图分析(以四分位数和四分卫距为基础具有一定的鲁棒性,多达25%的数据可以变得任意远而不会很大的扰动四分位数,所以异常值不能对这个标准施加影响)一致性分析:数据集成的过程中,可能来自不同的数据源

  1. 分箱:首先排序数据,并将它们分到等深的箱中,后按平均值,中值边界平滑
  2. 聚类:监测并且去除孤立点
  3. 计算机和人工检查结合:有人工干预:就产生偏向性
  4. 回归:通过让数据适应回归函数来平滑

数据集成:处理数据冗余

  1. 相关性分析可以检测到
  2. 仔细将多个数据源中的数据集成起来

8.数据变换:

  1. 平滑
  2. 聚集
  3. 数据概化
  4. 规范化:将数据映射到小的子空间(最小-最大规范化、z-score、小数定标规范化)
  5. 属性构造

9.数据归约:减省挖掘时间,提高效率

  1. 数据立方体聚集:顶层越小越概化,基本的底层的方体,对方体的预计算
  2. 维归约:删除不相关属性,重复维
  3. 数据压缩:HMP4、有损、无损、字符
  4. 数值归约:用参数来表示原来的数据集
  5. 离散化和概念分层产生
  6. 用计算机来归约:启发式(探索性)方法:(逐步向前选择、逐步向后选择、向前向后相结合、判定归纳树)
  7. 直方图:比较流行数据归约技术
  8. 聚类
  9. 选样

10.离散化:

  1. 将连续属性的范围划分为区间
  2. 有效的归约数据(基于判定树的分类挖掘)
  3. 概念分层:通过使用高层的概念来替代底层的属性值(实际的年龄)eg:年龄,青年,中年,老年。分箱、直方图分箱、聚类分析、基于熵的离散化、通过自然划分分段:3-4-5规则

数据存储:json CSV文件、mysql(直观)、Redis(取出的是二进制,需要转化为字符串再操作)、MongDB(优点:不在乎数据结构,注意取出来的时候写个脚本整理一下)

可视化:RPowerBIPythonplotly)、词云生成器

 

11.数据挖掘系统:KDDBI(用数据挖掘原语指导数据挖掘系统(挖掘目标等))

  1. 为了解决特征数字化出现数字的歧义。eg:212倍往往会使用单热编码,把每个分类转换成一个稀疏的向量,除编号应对应位置,其他都是0
  2. 对于有大量唯一值的分类型特征来说,将特征哈希化,此方法相较于单热编码,提供了更低的稀疏度和更高的压缩度。

 

  1. OLAP:事实维度表和..维表
  2. 特征工程

(一).特征选择
1.过滤法,通过信息按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适特征(
方差筛选(sklearn中的VarianceThreshold)
相关系数(主要用于输出连续值的监督学习算法中。我们分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。))
假设检验(卡方检验(检验某个特征分布和输出值分布之间的相关性,临界概率可以合理又科学的筛选异常用户)
F检验和t检验(F检验的函数f_classiff_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 sklearnOneHotEncoder可实现(比如某特征的取值是高,中和低,那么我们就可以创建三个取值为0或者1的特征,将高编码为1,0,0这样三个特征,中编码为0,1,0这样三个特征,低编码为0,0,1这样三个特征)
2.特征嵌入embedding:可以用tf.nn.embedding_lookup找到该用户的特征嵌入向量。特征嵌入矩阵会在反向传播的迭代中优化。
在自然语言处理中,我们也可以用word2vec将词转化为词向量
4. 离散特征的离散化处理:sklearnLabelEncoder将其转化为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 weightsample weight可以使用。
采样法:对类别样本数多的样本做子采样,对类别样本数少的样本做过采样
上述两种常用的采样法很简单,但是都有个问题,就是采样后改变了训练集的分布,可能导致泛化能力差。所以有的算法就通过其他方法来避免这个问题,比如SMOTE算法通过人工合成的方法来生成少类别的样本。
得到不改变训练集分布的新样本,让训练集中各个类别的样本数趋于平衡。我们可以用imbalance-learn这个Python库中的SMOTEENN类来做SMOTE采样。

数据挖掘方法

标签:好的   大小   通过   导数   unknown   金融数据分析   全局   enc   创建   

原文地址:https://www.cnblogs.com/lgx-fighting/p/9372790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!