自我介绍一下,我是一名大四应届毕业生对数据挖掘方面很感兴趣,最近开始着手系统学习,在这里与大家分享我的学习笔记与心得,如果不足或错误请大家指出,感谢。
1、资料完整无缺,各类指标项齐全
2、数据准确无误,反映的都是正常状态下的水平
对获取到的数据可以在从中进行抽样操作:
①随机抽样
②等距抽样
③分层抽样
④从起始顺序抽样
⑤分类抽样
数据抽样多少是带着人们对如何实现数据挖掘目标的先验认识进行操作的。当我们拿到一个样本数据集后,它是否能达到我们原来的设想、样本中有没有明显的规律和趋势、有没有出现过从未设想的数据状态、属性之间有什么相关性、他们可区分成怎样一些类别…这些都是要探索的内容。
当采集数据维度过大的时候,如何进行降维操作、缺失值处理等都是数据预处理要解决的问题。由于采样数据中常常包含许多含有噪声、不完整、甚至不一致的数据,对数据挖掘所涉及的数据对象必须进行预处理。主要包括数据筛选、数据变量转换、缺失值处理、坏数据处理、数据标准化、主成分分析、属性选择、数据违约等。
Enterprise Miner (EM)是SAS推出的一个集成的数据挖掘系统,允许使用和比较不同的技术,同时还集成了复杂的数据库管理软件。它的运行方式是通过在一个工作空间( workspace)中按照一定的顺序添加各种可以实现不同功能的节点,然后对不同节点进行相应的设置,最后运行整个工作流程(workflow), 便可以得到相应的结果。
IBMSPSSModeler原名Clementine,2009年被IBM公司收购后对产品的性能和功能进行了大幅度改进和提升。它封装了最先进的统计学和数据挖掘技术来获得预测知识,并将相应的决策方案部署到现有的业务系统和业务过程中,从而提高企业的效益。IBMSPSSModeler拥有直观的操作界面、自动化的数据准备和成熟的预测分析模型,结合商业技术可以快速建立预测性模型。
Microsoft公司的SQL Server中集成了数据挖掘组件——Analysis Servers,借助SQL Server的数据库管理功能,可以无缝地集成在SQL Server数据库中。在SQL Server 2008中提供了决策树算法、聚类分析算法、Naive Bayes算法、关联规则算法、时序算法、神经网络算法、线性回归算法等9种常用的数据挖掘算法。但是,预测建模的实现是基于SQL Server 平台的,平台移植性相对较差。
Python ( Matrix Laboratory, 矩阵实验室)是美国Mathworks公司开发的应用软件,具备强大的科学及工程计算能力,它不但具有以矩阵计算为基础的强大数学计算能力和分析功能,而且还具有丰富的可视化图形表现功能和方便的程序设计能力。Python 并不提供一个专门的数据挖掘环境,但它提供非常多的相关算法的实现函数,是学习和开发数据挖掘算法的很好选择。
在这里,我选择的主要分析工具是Python
Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。我将用到的库有Numpy、Scipy、 Matplotib、 Pandas、 Scikit-Learn、 Keras 和Gensim等,下面将对这些库的安装和使用进行简单的介绍。如果你安装的是Anaconda发行版,那么它已经自带了以下库: Numpy、 Scipy、Mat-plotlib、 Pandas 和Scikit-Learn。
扩展库 | 简介 |
---|---|
Numpy | 提供数组支持,以及相应的高效的处理函数 |
Scipy | 提供矩阵支持,以及矩阵相关的数值计算模块 |
Matplotlib | 强大的数据可视化工具、做图库 |
Pandas | 强大、灵活的数据分析和探索工具 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 |
Scikit-Learn | 支持回归、分类、聚类等强大的机器学习库 |
Keras | 深度学习库 |
Gensim | 用作文本主题模型的库,文本挖掘可能会用到 |
还有很多其他的库没有说到,我们后续再补充。
Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但它不是真正的数组,而且在数据量较大时,使用列表的速度就会慢得让人难以接受。为此,Numpy 提供了真正的数组功能,以及对数据进行快速处理的函数。Numpy还是很多更高级的扩展库的依赖库,后面章节介绍的Scipy. Matplotlib 、Pandas 等库都依赖于它。值得强调的是Numpy内置函数处理数据的速度是C语言级别的,因此在编写程序的时候,应当尽量使用它们内置的函数,避免出现效率瓶颈的现象(尤其是涉及循环的问题)。
安装:
pip install numpy
Numpy基本操作:
# coding=utf8
import pandas as pd
s = pd.Series([1, 2, 3], index=['a', 'b', 'c']) # 创建一个序列s
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c']) # 创建一个表
d2 = pd.DataFrame(s)
print(d.head()) # 预览前五行数据
print(d.describe()) # 数据基本统计量
pd.read_csv('athlete_events.csv',encoding = 'utf-8')
参考链接:
http://www.numpy.org/
http://reverland.org/python/2012/08/22/numpy/
如果说Numpy让Python有了Matlab的味道,那么Scipy就让Python真正地成为了半个Matlab了。Numpy 提供了多维数组功能,但它只是一般的数组, 并不是矩阵。例如,当两个数组相乘时,只是对应元素相乘,而不是矩阵乘法。Scipy 提供了真正的矩阵,以及大量基于矩阵运算的对象与函数。Scipy包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算,显然,这些功能都是挖掘与建模必的。
安装:
pip install python-scipy
Scipy求解非线性方程组和数值积分:
# coding=utf8
# 求解的线性方程组为:2x1-x2^2=1,x1^2-x2=2
from scipy.optimize import fsolve # 导入求解方程组的函数
def f(x):
x1 = x[0]
x2 = x[1]
return [2 * x1 - x2 ** 2 - 1, x1 ** 2 - x2 - 2]
result = fsolve(f, [1, 1]) # 输入初值(1,1)
print(result)
# 数值积分
from scipy import integrate # 导入积分函数
def g(x): # 定义被积函数
return (1 - x ** 2) ** 0.5
pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差,返回值是两个,第一个是结果,第二个是误差
# print(integrate.quad(g, -1, 1))
print(pi_2 * 2)
参考链接:
http://www.scipy.org/
http://reverland.org/python/2012/08/24/scipy/
不论是数据挖掘还是数学建模,都免不了数据可视化的问题。对Python来说,Matplotlib是最著名的绘图库,它主要用于二维绘图,当然它也可以进行简单的三维绘图。它不但提供了–整套和Matlab相似但更为丰富的命令,让我们可以非常快捷地用Python可视化数据,而且允许输出达出版质量的多种图像格式。
安装:
pip install python-matplotlib
Matplotlib作图的基本代码:
# coding=utf8
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000) # 作图的变量、自变量
y = np.sin(x) + 1 # 因变量y
z = np.cos(x ** 2) + 1 # 因变量z
plt.figure(figsize=(8, 4)) # 设置图像大小
plt.plot(x, y, label='$\sin x +1$', color='red', linewidth=2) # 作图、设置标签、线条颜色、线条大小
plt.plot(x, z, 'b--', label='$\cos x^2 + 1$') # 作图、设置标签、线条类型
plt.xlabel('Time(s) ') # x轴名称
plt.ylabel('Volt') # y轴名称
plt.title('A Simple Example') # 标题名称
plt.ylim(0, 2.2) # 显示的y轴范围
plt.legend() # 显示图例
plt.show() # 显示作图结果
http://matplotlib.org/gallery.html)
Pandas的功能非常强大,支持类似于SQL的数据增、删、查、改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据等。事实上,单纯Pandas工具就足以写一本书,大家可以阅读Pandas的主要作者之一 —— Wes McKinney写的《利用Python进行数据分析》一书,学习更详细的内容。
安装:
pip install pandas
pip install xlrd
pip install xlwt #这里为Python添加读/写Excel的功能
Pandas的简单例子:
# coding=utf8
import pandas as pd
s = pd.Series([1, 2, 3], index=['a', 'b', 'c']) # 创建一个序列s
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c']) # 创建一个表
d2 = pd.DataFrame(s)
print(d.head()) # 预览前五行数据
print(d.describe()) # 数据基本统计量
pd.read_csv('athlete_events.csv',encoding = 'utf-8')
注:Pandas是我在做数据分析过程中的主力工具,在后面会频繁的使用~因此在这里就先不详细介绍了,后面使用中会尽可能详细的讲解它。
Pandas着眼于数据的读取、处理和探索,而StatsModels则更加注重数据的统计建模分析,它使得Python有了R语言的味道。StatsModels 支持与Pandas进行数据交互,因此,它与Pandas结合,成为了Python下强大的数据挖掘组合。
安装:
pip install statsmodels
ADF平稳性检验:
#coding=utf8
from statsmodels.tsa.stattools import adfuller as ADF #导入ADF检验
import numpy as np
print(ADF(np.random.rand(100))) #返回值中有ADF、p值等
从该库的名字可以看出,这是一个机器学习相关的库。不错,Scikit-Learn 是Python下强大的机器学习工具包,它提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测和模型分析等。
安装:
pip install scikit-learn
简单的机器学习模型:
# coding=utf8
from sklearn.linear_model import LinearRegression # 导入线性回归模型
# 一个很简单的机器学习模型
model = LinearRegression() # 建立线性回归模型
print(model)
简单的例子:
from sklearn import datasets # 导入数据集
iris = datasets.load_iris() # 加载数据集
print(iris.data.shape) # 查看数据集大小
from sklearn import svm # 导入svm模型
clf = svm.LinearSVC() # 建立线性svm分类器
clf.fit(iris.data, iris.target) # 用数据进行训练
clf.predict([[5.0, 3.6, 1.3, 0.25]]) # 训练好模型后,输入新的数据进行预测
print(clf.coef_) # 查看训练好的模型的参数
1.所有模型提供的接口有:
model.fit() : 训练模型,对于监督模型来说是fit(X,y),对于非监督模型是fit(X)
2.监督模型提供的接口有:
model.predict(X_new): 预测新样本
model.predict_proba(X_new) :预测概率,仅对某些模型有用,比如LR
model.score(): 得分越高,fit越好
3.非监督模型提供的接口有:
model.transform(): 从数据中学到新的“基空间”
model.fit_transform(): 从数据中学到新的基并将这个数据按照这组“基”进行转换
虽然Scikit-Learn足够强大,但是它并没有包含一种强大的模型——人工神经网络。人工神经网络是功能相当强大的、但是原理又相当简单的模型,在语言处理、图像识别等领域有着重要的作用。近年来逐渐火起来的“深度学习”算法,本质上也就是一种神经网络,可见在Python中实现神经网络是非常必要的。事实上,Keras 并非简单的神经网络库,而是一个基Theano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。由于它是基于Theano的,因此速度也相当快。有必要介绍一下Theano,它也是Python的一个库,它是由深度学习专家Yoshua Bengio带领的实验室开发出来的,用来定义、优化和高效地解决多维数组数据对应数学表达式的模拟估计问题。它具有高效地实现符号分解、高度优化的速度和稳定性等特点,最重要的是它还实现了GPU加速,使得密集型数据的处理速度是CPU的数十倍。
安装:
安装Keras之前首先需要安装Numpy、Scipy和Theano。安装Theano先要准备–个C++编译器,这在Linux下是自带的。因此,在Linux下安装Theano和Keras非常简单,只需要下载源代码,然后用python setup.py install安装就行了,具体可以参考官方文档。可是在Windows下就没有那么简单了,因为它没有现成的编译环境。一般而言是先安装MinGW(Windows’下的GCC和G++),然后再安装Theano(提前装好Numpy等依赖库),最后安装Keras。如果要实现GPU加速,还需要安装和配置CUDA(天下没有免费的午餐,想要速度、易用两不误,那么就得花点心思)。限于篇幅,我就不详细介绍在WindowsTheano和Keras的安装配置方法。
简单搭建一个MLP(多层感知器):
# coding=utf8
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential() # 模型初始化
model.add(Dense(20, 64)) # 添加输入层(20节点)、第一隐藏层(64节点)的连接
model.add(Activation('tanh')) # 第一隐藏层用tanh作为激活函数
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
model.add(Dense(64, 1)) # 添加第二隐藏层(64节点),输出层(1节点)的连接
model.add(Activation('sigmoid')) # 输出层用sigmoid作为激活函数
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) # 定义求解算法
model.compile(loss='mean_squared_error', optimizer=sgd) # 编译生成模型,损失函数为平均误差平方和
model.fit(X_train, y_train, nb_epoch=20, batch_size=16) # 训练模型
score = model.evaluate(X_test, y_test, batch_size=16) # 测试模型
要注意的是,Keras的预测函数与Scikit-Learn有所差别,Keras用的是model.predict()方法给出概率,model.predict_classes()方法给出分类结果。
参考链接:
http://www.52nlp.cn/ 如何计算两个文档的相似度二
在Gensim的官网中,它对自己的简介只有一句话: topic modelling for humans!
Gensim是用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec 等,这些领域的任务往往需要比较多的背景知识,通常的情况是:研究这方面的读者,已经不需要我再多说什么;不研究这方面的读者,在这里也说不清楚。(所以Gensim的介绍只有一句话也就不奇怪了。)
需要一提的是,Gensim把Google公司在2013年开源的著名的词向量构造工具Word2Vec编译好了作为它的子库,因此需要用到Word2Vec的读者也可以直接用Gensim而无需自行编译了。据说Gensim的作者对Word2Vec的代码进行了优化,据说它在Gensim下的表现比原生的Word2Vec还要快。(为了实现加速,需要准备C++编译器环境,因此,建议用到Gensim的Word2Vec的读者在Linux下环境运行。)
安装:
pip install gensim
Gensim使用Word2Vec的简单例子:
# coding=utf8
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : $(message)s', level=logging.INFO)
# logging是用来输出训练日志的
# 分好词的句子,每个句子以词列表的形式输入
sentences = [['first', 'sentence'], ['second', 'sentence']]
# 用以上的句子训练向量模型
model = gensim.models.Word2Vec(sentences, min_count=1)
print(model['sentence']) # 输出单词sentence的词向量
参考链接:
http://radimrehurek .com/gensim/
htp://www.52nlp.cn/ (如何计算两个文档的相似度二)
本次主要对Python进行简单介绍,包括软件安装、使用入门及相关注意事项和Python数据分析及挖掘相关工具箱。由于Python包含多个领域的扩展库,而且扩展库的功能也相当丰富,本次也只介绍与数据分析及数据挖掘相关的一小部分,包括高维数组、数值计算、可视化、机器学习、神经网络和语言模型等。
★学习Python数据挖掘纯属个人爱好,如有不足或错误请指出谢谢。