大数据(Big Data),指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大数据(Big Data)的特征
1.体量巨大
2.种类繁多
3.价值密度低
4.处理速度快
大数据挑战
1.数据的实时性要求
2.数据的不可靠
3.数据的多样性和异构性
4.数据隐私问题
5.数据的访问与共享
6.数据的合理性
大数据的发展趋势-我国大数据产业规模稳步增长
根据信通院数据,2017年我国大数据产业规模为4700亿元,同比增长36%。大数据软硬件产品的产值约为 234 亿元人民币,同比增长 39%。 2017 年我国数字经济总量达到 27.2万亿元,同比名义增长超过 20.3%,占 GDP 比重达到 32.9%。在这其中,以大数据为代表的新一代信息技术对于数字经济的贡献功不可没。
大数据的发展趋势-融合提速,不均衡现象突出
行业分布不均衡:金融、政务、电信、电商等行业发展融合效果好。 业务类型不均衡:主要集中在外围业务,营销分析、客户分析和内部运营等。在产品设计、产品生产、企业供应链管理等核心业务的融合有待提高。 地域分布不均衡:受经济分布、人才聚集、技术发展等因素影响,大数据应用主要分布在北京、上海、广东、浙江等东部发达地区。中西部地区水平较低,有待提高,但需求较大。
大数据的发展趋势-创新与升级
创新:大数据与云计算、人工智能等前沿创新技术深度融合
实现超大规模计算、智能化自动化和海量数据的分析,在短时间内完成复杂度较高、精密度较高的信息处理。
大数据分析的定义
数据分析是基于商业等目的,有目的的进行收集、整理、加工和分析数据,提炼有价值信息的过程。 大数据分析即针对海量的、多样化的数据集合的分析。
大数据分析的能力体系
数学、统计学知识 数据分析的基础,是整理、描述、预测数据的手段,是抽象为数据模型的理论知识
传统分析 在数据量较少时,传统的数据分析已经能够发现数据中包含的知识,包括结构分析、杜邦分析等,传统分析方法成熟,应用广泛
行业经验 行业经验可在数据分析前确定分析需求,分析中检验方法是否合理,以及分析后指导应用,行业不同,应用也不相同
工具支撑 数据分析的工具,将分析模型封装,使不了解技术的人也可实现数据建模,快速响应需求
机器学习 通过计算机自学习,发现数据规律,但结论不易控制
数据挖掘 数据挖掘是挖掘数据背后隐藏的知识的重要手段
分析误区 不了解分析模型的数学原理,会导致错误地使用模型,得出错误的分析结论,影响业务决策。因此需深入了解模型原理和使用限制。
大数据分析的产生与发展——大数据分析开源框架
在存储层, HDFS 已经成为了大数据磁盘存储的事实标准,针对关系型以外的数据模型,开源社区形成了 K-V( key-value)、列式、文档、图这四类 NoSQL 数据库体系, Redis、 HBase、 Cassandra、 MongoDB、Neo4j 等数据库是各个领域的领先者。 计算处理引擎方面, Spark已经取代 MapReduce 成为了大数据平台统一的计算平台,在实时计算领域 Flink 是 Spark Streaming 强力的竞争者。 在数据查询和分析领域,形成了丰富的 SQL on Hadoop 的解决方案, Hive、 HAWQ、Impala、 Presto、Spark SQL 等技术与传统的大规模并行处理( massively parallel processor, MPP)数据库竞争激烈,目前 Hive 还是这个领域当之无愧的王者。 在数据可视化领域,敏捷商业智能( business intelligence,BI)分析工具 Tableau、QlikView 通过简单的拖拽来实现数据的复杂展示,是目前最受欢迎的可视化展现方式
大数据分析的应用场景
零售商、银行、制造商、电信供应商和保险公司等都在利用数据挖掘技术,从定价、促销和人口统计数据,到经济、风险、竞争和社交媒体,研究以上这些如何影响它们的商业模式、收入、运营和客户关系等各个领域 制造业存在大量的设备,通过感应器采集不同类型的数据获得如音响、振动、压力、电流、电压和控制器的数据,大量的数据构建制造业的大数据, 作为设备诊断和健康管理分析工具的输入项 媒体的大数据应用,针对不同用户调整消息(广告)和内容(文章)
零售商、银行、制造商、电信供应商和保险公司等都在利用数据挖掘技术,从定价、促销和人口统计数据,到经济、风险、竞争和社交媒体,研究以上这些如何影响它们的商业模式、收入、运营和客户关系等各个领域 制造业存在大量的设备,通过感应器采集不同类型的数据获得如音响、振动、压力、电流、电压和控制器的数据,大量的数据构建制造业的大数据, 作为设备诊断和健康管理分析工具的输入项 媒体的大数据应用,针对不同用户调整消息(广告)和内容(文章)
卫生保健。医学影像是医生判断疾病的一个重要手段,利用深度学习算法,在人类医学专家的帮助下,在心血管、肿瘤、神内、五官等领域建立了多个精准深度学习医学辅助诊断模型,取得了良好的进展。
个性化营销。对顾客的了解越多,就可以为他们提供更好的服务,并且销售得越多,这是营销个性化的基础。当你访问电商并查看某个产品之后,在后面的数天里,整个网络上都可以看到和该产品相关的数字广告,但这只是营销个性化的冰山一角。
在线搜索。每次用户在Google上执行搜索时,该程序都会监视用户对结果的响应方式。如果点击结果并保留在该网页上,可以假设用户获得了要查找的信息。如果用户点击第二页的结果,或者在不点击任何结果的情况下输入新的搜索字符串,可以推测搜索引擎没有提供您想要的结果 - 程序可以从这个错误中学习,在未来提供更好的结果。
自然语言处理:机器翻译、聊天机器人、招聘工具、会话搜索等等。虚拟个人助理Siri,Alexa,Google Now。 智能汽车:74%的人预计到2025年我们将会看到智能汽车在上路。一辆智能汽车不仅会融入物联网,还会了解其拥有者及其环境。它可以调整内部设置( 温度,音频,座椅位置等); 自动根据驾驶员,报告甚至修复问题本身;自行驾驶,并提供有关交通和道路状况的实时建议。
参数估计
参数估计问题 根据样本推断总体的分布或分布的数字特征称为统计推断。它是数理统计学的核心。有 一类统计推断问题是总体的分布函数或概率函数的数学表达式为已知,但它的某些参数(总体的数字特征也作为参数)却未知,我们要求对未知参数或未知参数的函数进行估计,这类问题称为参数估计问题。 参数估计的方式 点估计 区间估计 设 x_1,x_2,…,x_n是来自总体 X 的一个样本,我们用一个统计量θ ̂=θ ̂(x_1,…,x_n)的取值作为θ的估计值, 称为θ的点估计(量),简称估计。在这里如何构造统计量并没有明确的规定,只要它满足一定的合理性即可。这就涉及到两个问题: 其一 是如何给出估计,即估计的方法问题; 其二 是如何对不同的估计进行评价,即估计的好坏判断标准。
回归
回归的定义 回归是处理两个或两个以上变量之间互相依赖的定量关系的一种统计方法和技术,变量之间的关系并非确定的函数关系,通过一定的概率分布来描述。
19世纪80年代高尔顿就开始思考父代和子代的相似性问题。搜集了1074对父母及孩子的身高,将结果描成散点图,发现趋势近乎一条直线。总的来说是父母平均身高X增加时,其子的身高Y也倾向于增加。 他计算了这些父母身高的平均值为68英寸,孩子的平均身高为69英寸,他猜想儿子的身高应该是父母身高+1英寸,结果并非如此,当父母身高低于平均身高时,其孩子的身高要高于猜想的身高,当父母身高高于平均身高时,孩子身高低于猜想的身高。 高尔顿对此研究后得出的解释是自然界有一种约束力,使人类身高在一定时期是相对稳定的。如果父母身高(或矮了),其子女比他们更高矮),则人类身材将向高、矮两个极端分化。自然界不这样做,它让身高有一种回归到中心的作用。这个性质被Galton成为“回归”
线性回归
线性回归(Linear Regression):在回归分析中,如果自变量和因变量之间存在着线性关系,则被称作线性回归。如果只有一个因变量一个自变量,则被称作一元线性回归,如果有一个因变量多个自变量,则被称作多元回归。
一元线性回归模型
在研究某一现象时,主要关心与影响该现象最主要因素关系时,两者有密切关系,但并非一个变量唯一确定另一个变量,可以使用一元线性回归模型。
因子分析
因子分析 因子分析是主成分分析的推广,也是利用降维的思想,由研究原始变量相关矩阵或协方差矩阵的内部依赖关系出发,把一些具有错综复杂关系的多个变量归结为少数几个综合因子的一种多元统计分析方法。 把每个研究变量分解为几个影响因素变量,将每个原始变量分解成两部分因素,一部分是由所有变量共同具有的少数几个公共因子组成的,另一部分是每个变量独自具有的因素,即特殊因子。 因子分析的目的: 因子分析的目的之一,简化变量维数。即要使因素结构简单化,希望以最少的共同因素(公共因子),能对总变异量作最大的解释,因而抽取得因子愈少愈好,但抽取因子的累积解释的变异量愈大愈好。 在因子分析的公共因子抽取中,应最先抽取特征值最大的公共因子,其次是次大者,最后抽取公共因子的特征值最小,通常会接近0。
数据规则
#引入库
import pandas as pd
#引入算法apriori算法模型
from mlxtend.frequent_patterns import apriori
#读取数据(相对路径)
data=pd.read_csv('M2_IFI_Data_Basket.csv')
#读取数据
data.head()
#读取数据,把数据整理成apriori算法能够接受的独热编码形式
#首先,切除不需要的属性列
#为了了解属性列的名称,使用info查看数据的基本信息
data.info()
#切片
data_cut=data.loc[:,'Fruits & vegetables':'Textile']
#看切片数据
data_cut.head()
#数据替换,把yes替换为True,把No替换为False
data_cut.replace(['Yes','No'],[True,False],inplace=True)
#查看数据是否替换成功
data_cut.head()
#到此为止,数据准备完毕
#使用apriori算法模型进行频繁项集的算法查找
#参数:数据data_cut,最小支持度0.1,要求使用属性名称,默认其他参数不变
Result=apriori(data_cut,min_support=0.1,use_colnames=True)
#查看结果
print(Result)
K近邻分析概述
k近邻(k-NearestNeighbor,kNN)分类算法 所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中 该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。
K近邻分析原理及步骤
k近邻(k-NearestNeighbor,kNN)分类算法是分类技术中最简单的方法之一。
kNN算法的指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断出你的类别
K 近邻算法使用的模型实际上对应于对特征空间的划分。K近邻算法有三个基本要素:
K值选择,距离度量,分类决策规则
当训练集、距离度量、k值以及分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类
K近邻分析原理及步骤
K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合。 如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,使预测发生错误。 在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最优的 K 值
K近邻分析算法python实现
#引入要用的库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
#引入模型
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
data=pd.read_csv('ods_bacteria_deterioration_info.csv',encoding='gb2312')
data.head(2)
data.describe()
data.info()
#查看y
data['dental_caries_sign'].value_counts()
#切分x和y
x=data[['age','gender','height','weight','blood_type','vision','breast_feeding']].values
y=data['dental_caries_sign'].values
#构建模型,参数:近邻数为5
model=KNeighborsClassifier(n_neighbors=5)
#把x和y丢进去训练
model.fit(x,y)
#引入新数据
data_new=pd.read_csv('ods_kindergarten_student_lose_info.csv',encoding='gb2312')
data_new.head()
#新数据要预测,要先切出跟x格式一样的术据,才丢进模型中
#然后预测结果
data_new['pred']=model.predict(
data_new[['age','gender','height','weight','blood_type','vision','breast_feeding']]
)
data_new
聚类分析的定义
聚类分析是一组将研究对象分为相对同质的群组的统计分析技术。 聚类分析对具有共同趋势或结构的数据进行分组,将数据项分组成多个簇(类),簇之间的数据差别尽可能大,簇内的数据差别尽可能小,即“最小化”簇内的相似性,最大化簇间的相似性。它主要解决的是把一群对象划分成若干个组的问题。划分的依据是聚类问题的核心。所谓“物以类聚,人以群分”,故得名聚类。
聚类分析的定义
聚类分析提出的背景
聚类是在预先不知道分类的情况下,根据信息相似度原则进行信息聚类的一种方法。 聚类的目的是将大量的数据通过“属于同类别的对象之间的差别尽可能的小,而不同类别上的对象的差别尽可能的大”的原则进行分类。
聚类是在预先不知道分类的情况下,根据信息相似度原则进行信息聚类的一种方法。 聚类的目的是将大量的数据通过“属于同类别的对象之间的差别尽可能的小,而不同类别上的对象的差别尽可能的大”的原则进行分类。
因此,聚类的意义就在于将观察到的内容组织成类分层结构,把类似的事物组织在一起。通过聚类分析,人们能够识别密集的和稀疏的区域因而发现全局的分布模式以及数据属性之间的有趣的关系。
聚类分析的原理
聚类分析是将样品或变量按照它们在性质上的亲疏程度进行分类的数据分析方法
它是典型的无监督分析方法,也就是没有关于样品或变量的分类标签,分类需要依据样品或者变量的亲疏程度进行。
聚类算法的分类
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans,DBSCAN
#先造数据
#左上角一坨,左下角一坨,右边大圈包小圈
#先生成大圈包小圈,总数据量是1000,大圈和小圈样本量的比例2:8(0.2),噪音比例0.05
x1,y1=datasets.make_circles(n_samples=1000,factor=0.2,noise=0.05)
#生成左上角一坨,相对大圈包小圈的中心点的位置【-1,1.2】的位置
#样本量200,维度(属性特征的数量)是2,类的标准差(样本有多分散)0.1,随机数状态5
x2,y2=datasets.make_blobs(n_samples=200,n_features=2,centers=[[-1,1.2]],
cluster_std=[[0.1]],random_state=5)
#生成左下角一坨,相对大圈包小圈的中心点的位置【-0.8,-1.2】的位置
#样本量300,维度(属性特征的数量)是2,类的标准差(样本有多分散)0.1,随机数状态5
x3,y3=datasets.make_blobs(n_samples=300,n_features=2,centers=[[-0.8,-1.2]],
cluster_std=[[0.1]],random_state=5)
#把三个样本的数据合成一个数据集
x=np.concatenate((x1,x2,x3))
#画图看看数据长什么样
plt.scatter(x[:,0],x[:,1],marker='*',c='gray')
plt.show()
#用k均值聚类看看效果
#课本一步到位:model=KMeans(n_clusters=4,random_state=9).fit_predict(x)直接拿到聚类结果
#拆分步骤
#构造模型,聚类数量是4,随机状态设置为9
model1=KMeans(n_clusters=4,random_state=9)
#x丢进模型拟合
model1.fit(x)
label_pred1=model1.labels_
#画图看结果,用聚类的分类标签当颜色
plt.scatter(x[:,0],x[:,1],marker='*',c=label_pred1)
plt.show()
#看看DBCSAN密度聚类效果
#model=DBSCAN
model2=DBSCAN(eps=0.1,min_samples=7)
model2.fit(x)
label_pred2=model2.labels_
#画图看结果,用聚类的分类标签当颜色
plt.scatter(x[:,0],x[:,1],marker='*',c=label_pred2)
plt.show()
随机森林概述
随机森林是用随机的方式建立一个森林,森林由很多的决策树组成,且每一棵决策树之间是没有关联的。
随机森林: 决策树 集成算法
随机森林原理及步骤
回顾决策树
分裂:在决策树的训练过程中,需要一次次的将训练数据集分裂成两个子数据集,这个过程就叫做分裂。 特征:在分类问题中,输入到分类器中的数据叫做特征。 待选特征、分裂特征:在决策树的构建过程中,需要按照一定的次序从全部的特征中选取特征。待选特征就是在步骤之前还没有被选择的特征的集合,而每一次选取出来的特征就是分裂特征
集成算法
集成学习是通过构建并结合多个机器学习器来完成学习任务。 对于训练集数据,我们通过训练若干个个体学习器(弱学习器),通过一定的结合策略,最终形成一个强学习器。 个体学习器可以是同一个种类(同质),也可以是不同种类(异质)。 结合策略:平均值、投票法。
集成算法 同质个体学习器集成学习大致分为两类,一类为并行化,如Bagging,一类串行生成,如Boosting。
Bagging即套袋法,其算法过程如下: 从原始样本集中抽取训练集。每轮从原始样本集中使用自助法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的) 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。 选择结合策略,捕获最后的结果。
Boosting是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。 它可以用来提高其他弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于Boosting 框架中,通过Boosting框架对训练样本集的操作,得到不同的训练样本子集,用该样本子集去训练生成基分类器。 每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器,这样在给定训练轮数 n 后,就可产生 n 个基分类器,然后Boosting框架算法将这 n个基分类器进行加权融合,产生一个最后的结果分类器。
随机森林算法实现过程
随机森林实现过程——数据随机选取
1.从原始数据集中采取有放回抽样,构造子数据集,子数据集数据量是与原始数据集相同的,不同子数据集的元素可以重复,同一子数据集中的元素也可重复
2.利用子数据集构建子决策树,将这个数据放到子决策树中,每个子决策树输出一个结果。
3.如果有新数据需要通过随机森林得到分类结果,就可通过对子决策树的判断结果投票,得到随机森林输出结果。
随机森林实现过程——待选特征随机选取
与数据集随机选取类似,随机森林子决策树的每一分裂过程(即每一枝节点处)并未用到所有待选特征,而是从所有待选特征中随机选取一定数量特征,之后再在随机选取特征中选取最优特征。这样能使随机森林中的决策树都能彼此不同,提升系统多样性从而提升分类性能。
随机森林实现过程——选取最终结果
平均法:对数值类的回归问题,将每个决策数据的输出结果做平均操作,作为最终随机森林输出。 投票法:对于分类问题,通常使用的是投票法。 相对多数投票法,少数服从多数 绝对多数投票法,票数过半数 加权投票法,每个决策树的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别
基于scikit-learn第三方机器学习库的实现
随机森林算法特点小结
#导入要用的库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB,BernoulliNB,MultinomialNB
from sklearn.metrics import classification_report
#读取数据
data=pd.read_csv('ods_bye_car_investigation_info.csv',encoding='gb2312')
data.head()
data.info()
#查看样本中分类是否均匀
data['buy_car_sign'].value_counts()
#切割出XY
x=data[['age','gender','annual_income','marital_status','is_local']].values
y=data['buy_car_sign'].values
#随机数种子
np.random.seed=118
#切割训练集和测试集,比例是8:2
(train_x,test_x,train_y,test_y)=train_test_split(x,y,train_size=0.8,test_size=0.2)
#构建模型,不需要设置参数
model=GaussianNB()
model.fit(train_x,train_y)
#用测试集数据评价模型
model.score(test_x,test_y)
#看分类报告
print(classification_report(test_y,model.predict(test_x)))
#使用模型
#假设一个人,56岁,女性,年收入25万,已婚,非本地人,请模型预测她是否买车
#数据编码:3,1,1,1,0
model.predict([[3,1,1,1,0]])
#看概率
model.predict_proba([[3,1,1,1,0]])