数据挖掘
第一章
1. 数据挖掘概念
1. 数据挖掘是从大量的、不完全的、有噪声的、模糊的随机的应用数据中,提取出潜在且有用的信息的过程。
2. 完整的数据分析的过程:
1. 确定知识发现目标
2. 数据采集
3. 数据探索
4. 数据预处理
5. 数据挖掘(模型选择)
6. 模型评估
3. 数据预处理
数据预处理主要包括数据清理、数据集成、数据归约、数据的变换、数据的离散化
数据清理: 包括缺失值和异常值的清理
数据集成: 多种数据源汇集成到一起,放入一个数据仓库的过程
数据规约: 保证原始数据信息不丢失的前提下,减少分析使用的数据量
数据的变换: 将原始的特征数据进行归一化和标准化的操作
数据的离散化: 通过聚类、直方图、分箱
4. 数据挖掘面临的问题:
1. 数据源的多样性
2. 数据挖掘算法的改进
3. 数据隐私保护
1. 数据挖掘的模型中任务主要集中: 回归、分类、预测、关联、聚类、异常检测
定量预测可分为时间序列分析和因果关系分析
时序列分析法有移动平均(ARIMA)、指数平滑,因果关系分析法有回归方法,计量经济模型,神经网络预测法、灰色预测法、马尔科夫预测法等
2. 数据仓库是面向主题的、集成的、相对稳定的随时间不断变化的数据集合与传统数据库面向应用相对应
数据仓库所面向的操作主要为联机分析处理(OLAP)
联机事务处理(OLTP)作用在关系型数据库上
第二章
常见统计学指标
同比: 指与历史同时期进行比较得到的数据
环比: 指与前一个统计时期进行比较得到的数值
Pandas简单介绍
1. Pandas 全称: Python Data Analysis Library
2. Pandas一维数据结构:Series Series的字符串表现形式为: 索引在左边,值在右边,但其还具有额外统计功能
Series是一种类似于一维数组的对象 默认索引以0开始
Series创建方法
>>> import pandas as pd
>>> a = pd.Series([1,2,3,4,5])
>>> b = pd.Series(range(4)) # range(4) --> 0, 1, 2, 3
>>> c = pd.Series(range(4), index = ["a", "b", "c", "d"]) # 可以自定义索引
>>> d = {'Ohio':35000, 'Texas':71000, 'Oregon':16000, 'Utah':5000}
# DataFrame 是Pandas的二维数据结构 类似矩阵 含有一组有序的列 每列可以是不同的值类型(数值、字符串、布尔型等) 既有行索引也有列索引 默认以0开始
#---------------------------------------------------------------------------------------
>>> # 使用字典创建DataFrame
>>> import pandas as pd
>>> a = { 'col1':[1, 2], 'col2':[3, 4] }
>>> test = pd.DataFrame(data=a)
>>> test
col1 col2
0 1 3
1 2 4
#---------------------------------------------------------------------------------------
>>> # 引入csv文件
>>> import pandas as pd
>>> b = pd.read_csv('./file.csv')
#---------------------------------------------------------------------------------------
# python中pandas包中的DataFrame有关操作iloc分割数据框
>>> # .iloc[行,列] 冒号表示从*到* 逗号表示*和*
>>> data.iloc[:] #查看所有数据
No square_feet loaction built price
1 2 200 5 9 7450
2 3 250 3 7 8450
3 4 300 3 4 9450
4 5 350 4 3 11450
5 6 400 2 4 15450
6 7 400 1 2 18450
0 1 2 3
>>> data.iloc[:,0:4] # 取前四列 No square_feet loaction built (注意下标顾头不顾尾)
No square_feet loaction built
1 2 200 5 9
2 3 250 3 7
3 4 300 3 4
4 5 350 4 3
5 6 400 2 4
6 7 400 1 2
>>> data.iloc[:,4] # 取第五列数据
price
1 7450
2 8450
3 9450
4 11450
5 15450
6 18450
>>> data.iloc[1] # 得到属性名、第二行数据、数据类型
No 2
square_feet 200
loaction 5
built 9
price 7450
Name: 1, dtype: int64
1. Pandas函数
abs() 求绝对值
cov() 求协方差
corr() 求相关系数
第三章
构建机器学习框架一般步骤
# 此步骤和人类学习的步骤一一对应
1. 数据的加载
2. 选择模型
3. 模型的训练
4. 模型的预测
5. 模型的评估
6. 模型的保存
实现机器学习模型
# 导入iris数据集
from sklearn.datasets import load_iris
# 分割数据模块
from sklearn.model_selection import train_test_split
# k最近邻(kNN, k-Nearest Neighbor)分类算法
from sklearn.neighbors import KNeighborsClassifier
#---------------------------------------------------------------------------------------
# 加载iris数据集
iris = load_iris()
X = iris.data
y = iris.target
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=概率值) # test_size根据题意
#---------------------------------------------------------------------------------------
## 建立模型进行训练和预测
# 建立模型
knn = KNeignborsClassifier()
# 训练模型
Knn.fit(X_train, y_train)
# 预测模型
Knn.predict(x_test)
评判指标
1. 并没有一套指标能完全适用于分类、回归、聚类等模型
通常关心的指标有: 准确率(Accuracy)、AUC(Area Under Curve) 是一个概率值,越大越好
2. 回归分析中常关心指标: 均方误差、平均绝对误差
# 使用Scikit-learn模型计算AUC值
>>> import pandas as pd
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> pred = np.array([0., 0.4, 0.35, 0.8])
#---------------------------------------------------------------------------------------
>>> fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)
>>> metrics.auc(fpr, tpr)
0.75
支持向量机
# 支持向量机可用于监督学习算法分类、回归和异常检测。支持向量机有以下特点:
(1) 支持向量机的优势
1. 在高维空间中非常高效
2. 即使在数据维度比样本数量大的情况下扔然有效
3. 在决策函数(称为支持向量)中 使用训练集的子集,因此同时也是高效利用内部内存的
(2) 支持向量机的缺点
1. 如果特征数量的样本数量大的多, 在选择核函数时要避免过拟合
2. 支持两向量机通过寻找支持向量机找到最优分割平面,是典型的二分类问题,因此无法解决多分类问题
3. 不直接提供概率估计
# RBF函数
概念: RBF核函数在此处使支持向量机通过某种非线性变换p(z),将输人空间映射到高维特征空间。
作用: 如果支持向量机的求解只用到内积运算,而在低维输人空间又存在某个函数K(x ,x'),它恰好等于高维空间中的这个内积,即K(x ,x')=<p(x)·p(x')>,那么支持向量机就不用计算复杂的非线性变换,而由这个函数K(x ,x')直接得到非线性变换的内积,这大大简化了计算。K(x ,x')这样的函数称为核函数
过拟合
1. 过拟合问题产生的原因如下:
(1)使用的模型比较复杂,学习能力过强。
(2)有噪声存在。
(3)数据量有限。
2. 解决过拟合的办法有以下3种。
(1)提前终止(当验证集上的效果变差的时候)。
(2)数据集扩增( Data Augmentation)。
(3)寻找最优参数。
第四章
分类器的构建
准确、速度、健壮性、可伸缩性、可解释性
朴素贝叶斯
原理及其应用(参考P67)
K近邻算法的优点如下:
1. 简单,易于理解,易于实现。
2. 只需保存训练样本和标记,无须估计参数,无须训练。
3. 不易受最小错误概率的影响。经理论证明,最近邻的渐进错误率最坏时不超过两倍的贝叶斯错误率,最好时接近或达到贝叶斯错误率。
K近邻算法的缺点如下
1. K的选择不固定。
2. 预测结果容易受含噪声数据的影响。
3. 当样本不平衡时,新样本的类别偏向于训练样本中数量占优的类别,容易导致预测错误。
4. 具有较高的计算复杂度和内存消耗,因为对每一个待分类的文本,都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
第五章
岭回归和Lasso回归
1. 监督学习有两大基本策略:经验风险最小化和结构风险最小化
2. 结构风险最小化是为了防止过拟合现象而提出的策略。结构风险最小化等价于正则化
3. 由于Lasso回归得到的是稀疏解,故除了可以用于回归分析外,还可以用于特征选取。
逻辑回归
1. 逻辑回归虽然名字里有“回归”二学,渣它奖际上是一种分类方法,主要用于二分类问题。
第六章
无监督学习
1. 划分聚类
2. K-Means 算法
3. 层次聚类
4. Hierarchical Clustering算法
# 无监督学习是指不设置所谓的“正确答案”去教会机器如何学习,而是让其自己发现数据中的规律,其训练数据由没有任何类别标记的一组输人向量工组成
# 无监督学习的两个非常重要的研究方向是聚类和降维。
实现降维有两种技术:特征选择、特征提取
特征选择:选择原始数据集中最具代表性或者最具传统意义的维度特征
特征提取:将原始特征转换为一组最具明显物理意义或者明显统计意义的特征
注意!! 选择指的是我们会因此对视某些维度的数据,而转换会保留所有维度的数据
降维的基本概念和原理
1. 特征选择指的是选择原始数据集中最具代表性或者最具统计意义的维度特征,而特征提取指的是将原始特征转换为一组具有明显物理意义或者明显统计意义的特征。在这里需要注意的是特征选择的选择过程与特征提取的转换过程存在本质的区别,选择指的是我们会因此丢弃某些维度的数据,而转换会保留所有维度的数据。
第七章
关联规则
1. 关联规则的挖掘过程主要包含两个阶段:
第―阶段从资料集合中找出所有的高频项目组(Frequent Itemsets)
第二阶段这些高频项目组产生关联规则(Association Rules)
2. Apriori算法看似很完美,却有以下一些难以克服的缺点
(1)对数据库的扫描次数过多
(2)会产生大量的中间项集
(3)采用唯一支持度
(4)算法的适应面窄
第八章
图像数据分析方法
1. 数据分析常用方法:图像变换、图像编码和压缩、图像增强和复原、图像分割、图像描述和特征提取、图像分类(识别)
图像变换常用方法:傅里叶变换、沃尔什变换、离散余弦变换、小波变换
所有的高频项目组(Frequent Itemsets)
第二阶段这些高频项目组产生关联规则(Association Rules)
2. Apriori算法看似很完美,却有以下一些难以克服的缺点
(1)对数据库的扫描次数过多
(2)会产生大量的中间项集
(3)采用唯一支持度
(4)算法的适应面窄
## 第八章
### 图像数据分析方法
```markdown
1. 数据分析常用方法:图像变换、图像编码和压缩、图像增强和复原、图像分割、图像描述和特征提取、图像分类(识别)
图像变换常用方法:傅里叶变换、沃尔什变换、离散余弦变换、小波变换