数据挖掘
概述
最近一直在学习数据挖掘和机器学习,无论是是服务端开发人员还是web开发人员,个人觉得最起码都要都一些最基本的数据挖掘和机器学习知识。废话少说,我们先来学习一下数据挖掘的是什么意思?个人的理解是从业务数据中挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势。也就是说我们从数据中挖掘到符合我们所需的目标。
数据挖掘的分解
目标定义-》数据采样-》数据整理-》模型评价-》模型发布。 所谓目标定义即定义我们到底需要做什么,目标的定义往往来源于需求,这里不去具体的阐述。 为了确保数据完整、各项属性或者指标齐全以及数据准确无误,所以对数据要进行采样处理。采样的方式有:
- 随机抽样:以相同的随机概率的方式对每组数据进行采样。
- 等距抽样:如果按4%的比例对一个有100组观测数据进行数据等距采样的话,则100/4=25,等距采样的方式是取第25,50,75,100这四组观测值。
- 分层采样:将观测数据分为若干层次然后以相同的概率进行采样。
- 分类抽样:依据某种观测数据的属性的取值来选择数据子集,比如:区域分类。
数据的整理分为很多步骤,对于已经采样的数据来说要进一步的进行审核和加工处理。数据预处理完成之后,在进行数据挖掘建模。最终对模型进行评价和发布。
Python数据挖掘技术栈
Numpy、Scipy、Matplotlib、Pandas、StatsModels、Scikit-Learn、Keras和Gensim.其中StatsModels是统计建模和计量经济学,Gensim文本处理类库。
异常值分析
异常值是指样本数据中的个别值,其数值明显偏离其余的观测值,也称为离群点。分析方法:
- 简单统计量分析:查看数据是否超出最大值和最小值等等。
- 3σ原则(拉依达准则):它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴.在(μ-3σ,μ+3σ)区间内的概率很大,超出这个范围的可能性不会超过0.3%。所以P(|x-μ|>3σ)<=0.3%
- 箱型图分析 QU+1.5IQR<异常值<QL-1.5IQR或大于的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
计算相关系数
在二元变量相关分析方法中,最常用的是Pearson相关系数、Spearman秩相关系数和判定系数方法。
Pearson相关系数
主要用在两个连续性变量之间的关系且连续性变量要服从正太分布,公式:
其中,x和y分别表示x变量的平均值和y变量的平均值。 相关系数r的取值范围是:-1<=r<=1,其中
- r>0为正相关,r<0为负相关
- |r|=1表示完全线性相关
- |r|=0表示不存在线性关系 其中0<r<1表示存在不同程度的线性相关,
- |r|<=0.3为不存在线性相关
- 0.3<|r|<=0.5 低度线性相关
- 0.5<|r|<=0.8 显著线性相关
- |r|>0.8为高度线性相关
Spearman秩相关系数
不服从正太分布的变量、分类或等级变量之间的关联性可采用Spearman秩相关系数(等级相关系数法)。公式为:
r=1 -{ frac{sum_{i=1}^n 6(R_i-Q_i)^2}{n(n^2-1)}}
在进行计算r之前,要对两个变量成对的取值分别按顺序编秩(从小到大或者从大到小),Ri代表x的秩次,Qi代表y的秩次。如果遇到x数据相同情况下,那么秩次为相同数据的平均值。
判定系数
判定系数是相关系数的平方,用r的平方表示,用来衡量回归方程对y的解释程度。取值范围为0-1,越接近于1代表x与y之间的相关性越强,越接近于0表明几乎没有直线相关。
归一化处理
最小-最大规范化
它是对原始数据的线性变换,将数值映射到0-1.公式为:
x^*=frac{x-min}{max-min}
0-均值规范化(标准差标准化)
经过处理的数据的均值为0,标准差为1.公式为:
x^*=frac{x_i-x}{sigma}
其中x为原始数据均值,σ为原始数据的标准差。
小数定标准规范化
x^*=frac{x}{10^k}
我们利用pandas来进行计算如下:
import pandas as pd
data = pd.read(file)
#归一化
t1=(data-data.min())/(data.max()-data.min())
#零-均值标准化
t2=(data-data.mean())/data.std()
# 小数定标规范化
t3=data/10**np.ceil(np.log10(data.abs().max()))
连续属性的离散化
- 等宽法
- 等频法
- 基于聚类的分析方法:采用k-means方法,即随机确定k个初始点作为质心,然后将数据集集中的每个点分配到簇中。每个点要找其距离最近的质点。
import pandas as pd
data = pd.read(input)
k=4
# 等宽法
d1 = pd.cut(data,k,labels=xrange(k))
# 等频法
w=[1.0*i/k for i in xrange(k+1)]
w = data.describe(percentiles=w)[4:4+k+1]
d2=pd.cut(data,w,range(k))
#k-means
from sklearn.cluster import KMeans
#建立模型
model = KMeans(n_clusters=k,n_jobs=4)
# 训练模型
model.fit(data.reshape(len(data),1))
#输出质心即聚类中心
c = pd.DataFrame(model.cluster_centers_)
数据规约
为了降低低效、错误数据对建模的影响,提高建模的准确性和降低存储成本,我们一般需要将数据进行规约处理。
属性规约
属性规约是通过属性合并来创建新属性维数,或者直接删除不相关的属性来减少属性的维数,从而提高数据挖掘的效率和降低计算成本。属性规约的目的是寻找出最小的属性子集并确保新数据子集的概率分布尽可能的接近原来数据集的概率分布。常用方法有:
- 合并属性:将一些旧属性和合并成新属性
- 逐步向前选择: 从一个空集合开始,每次从原来属性集合中选择一个当前最有的属性添加到当前属性集中。直到无法找到最优或者达到某个阈值为止。
- 逐步向后删除:从一个全属性集开始,每次从当前属性子集张选择一个当前最差的属性子集删除。直到无法选择出最差或者达到某个条件阈值。
- 决策树归纳:是一种树结构,如果没有出现在决策树中的属性认为是无关紧要的属性。
- 主成分分析: 用较少的变量去解释原始数据中的大部分变量,即将许多相关性很高的线性变量转化成彼此相互独立或不相关的变量。 其中逐步向前选择、逐步向后删除和决策树归纳是直接删除不相关的属性,主成分分析是一种用于连续属性的数据降维方法。
- 【LeetCode 20】关关的刷题日记45 – Valid Parenthese
- 1819: [JSOI]Word Query电子字典
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.2)
- javascript 事件基础
- 算法模板——sap网络最大流 3(递归+邻接矩阵)
- 从Hash Killer I、II、III论字符串哈希
- angularjs 缓存详解
- 算法模板——线段树7(骰子翻转问题)
- 2729: [HNOI2012]排队
- 算法模板——sap网络最大流 2(非递归+邻接表)
- 算法模板——sap网络最大流 1(非递归+邻接矩阵)
- webpack学习(四)extract-text-webpack-plugin插件
- Codevs2822 爱在心中
- 3098: Hash Killer II
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用 NetworkX + Gephi + Nebula Graph 分析<权力的游戏>人物关系(上篇)
- [Oracle数据库迁移]使用expdp/impdp进行迁移
- [周末往期回顾]使用Django获取Linux性能数据并存放在redis中
- [周末往期回顾]使用Python将Oracle已使用过索引存入MySQL中
- [周末往期回顾]DB_CREATE_FILE_DEST,DB_CREATE_ONLINE_LOG_DEST_n
- 【DB宝18】在Docker中安装使用MySQL高可用之MGR
- [周末往期回顾]redis的介绍及安装
- [Oracle 日常管理]使用BBED定位数据位置
- [Oracle 日常管理]表的相关操作
- JsonPath实践(二)
- C# 使用OpenCV在一张图片里寻找人脸
- 【DB笔试面试858】在Oracle中,ipcs和ipcrm命令的作用有哪些?
- Qt音视频开发13-mpv录像存储
- Oracle参数解析(spfile)
- ROS2机器人笔记20-08-18