最近一直在学习数据挖掘和机器学习,无论是是服务端开发人员还是web开发人员,个人觉得最起码都要都一些最基本的数据挖掘和机器学习知识。废话少说,我们先来学习一下数据挖掘的是什么意思?个人的理解是从业务数据中挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势。也就是说我们从数据中挖掘到符合我们所需的目标。
目标定义-》数据采样-》数据整理-》模型评价-》模型发布。 所谓目标定义即定义我们到底需要做什么,目标的定义往往来源于需求,这里不去具体的阐述。 为了确保数据完整、各项属性或者指标齐全以及数据准确无误,所以对数据要进行采样处理。采样的方式有:
数据的整理分为很多步骤,对于已经采样的数据来说要进一步的进行审核和加工处理。数据预处理完成之后,在进行数据挖掘建模。最终对模型进行评价和发布。
Numpy、Scipy、Matplotlib、Pandas、StatsModels、Scikit-Learn、Keras和Gensim.其中StatsModels是统计建模和计量经济学,Gensim文本处理类库。
异常值是指样本数据中的个别值,其数值明显偏离其余的观测值,也称为离群点。分析方法:
在二元变量相关分析方法中,最常用的是Pearson相关系数、Spearman秩相关系数和判定系数方法。
主要用在两个连续性变量之间的关系且连续性变量要服从正太分布,公式:
其中,x和y分别表示x变量的平均值和y变量的平均值。 相关系数r的取值范围是:-1<=r<=1,其中
不服从正太分布的变量、分类或等级变量之间的关联性可采用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,标准差为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()))
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_)
为了降低低效、错误数据对建模的影响,提高建模的准确性和降低存储成本,我们一般需要将数据进行规约处理。
属性规约是通过属性合并来创建新属性维数,或者直接删除不相关的属性来减少属性的维数,从而提高数据挖掘的效率和降低计算成本。属性规约的目的是寻找出最小的属性子集并确保新数据子集的概率分布尽可能的接近原来数据集的概率分布。常用方法有: