首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【人工智能 | 大数据】基于人工智能的大数据分析方法

  • 25-02-14 15:40
  • 3414
  • 10009
blog.csdn.net

在这里插入图片描述

【作者主页】Francek Chen
【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML)和数据挖掘等多种方法,旨在通过自动化的方式分析复杂数据集,发现潜在的价值和关联性,实现数据的自动化处理和分析,从而支持决策和优化业务流程。与传统的人工分析相比,智能大数据分析具有自动化、深度挖掘、实时性和可视化等特点。智能大数据分析广泛应用于各个领域,包括金融服务、医疗健康、零售、市场营销等,帮助企业做出更为精准的决策,提升竞争力。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/Intelligent_bigdata_analysis。

文章目录

    • 前言
    • 一、大数据分析的重要性
    • 二、大数据下的IDA
    • 三、常见的数据分析方法
    • 四、基于机器学习的大数据分析方法
      • (一)大数据聚类
      • (二)大数据关联分析
      • (三)大数据分类
      • (四)大数据预测
      • (五)大数据智能推荐
    • 五、基于深度学习的大数据分析方法
      • (一)Submarine(Hadoop生态系统)
      • (二)DL4J(deeplearning4j,java深度学习框架)
    • 六、以计算智能为基础的大数据分析
    • 七、人工智能与大数据的结合
      • (一)技术融合的必要性
      • (二)融合的具体案例
    • 小结


前言

在信息化和数字化迅猛发展的今天,人工智能(AI)和大数据(Big Data)已成为推动社会变革和技术进步的两大支柱。随着互联网的普及、计算能力的提升以及数据获取手段的多样化,AI 和大数据技术的应用愈发广泛和深入。

人工智能(AI)是一门模拟和扩展人类智能的科学,通过计算机系统来执行通常需要人类智能才能完成的任务。这些任务包括但不限于视觉识别、语音识别、决策制定和语言翻译。AI的核心在于算法和模型,尤其是机器学习和深度学习技术,通过大量数据的训练,使得计算机能够进行自主学习和改进。

大数据(Big Data)指的是那些数据量巨大、类型多样、生成速度快且具有高价值潜力的数据集合。大数据的四大特征,即数据量(Volume)、数据速度(Velocity)、数据种类(Variety)和数据真实性(Veracity),使得传统的数据处理方法难以应对。大数据技术包括数据收集、存储、处理和分析,旨在从大量的结构化和非结构化数据中提取有价值的信息和知识。

在这里插入图片描述

目前,大数据已经成为人类发展的重要经济资产,然而海量的数据仍对挖掘、分析和计算技术提出更高要求。人工智能技术作为大数据分析的重要方式之一,其中深度学习、机器学习等技术均有效满足了日益复杂的大数据分析。因此,为拓展大数据分析的应用范围,优化大数据分析任务,以人工智能为基础研究大数据分析方法并掌握其技术要点是必要的。

一、大数据分析的重要性

所谓大数据,指的是非结构化数据的集合,相较于传统数据管理工具,其具有鲜明的数据采集、存储与处理能力,在对其开展目标信息的提取工作时,必须通过处理海量数据方可实现。但是一旦有效挖掘数据信息,就能够获得大量的内在价值信息和科学知识,促进数字经济的快速发展。新时期下,新媒体技术、移动通信网络几乎覆盖全球,数据信息无处不在,在经济发展方面,通过对产业、工业发展相关数据进行深入分析,能够为产业经济结构的调整提供有效支持;在制造方面,通过结合物联网、BIM等技术,能够为制造业转型和社会发展提供强有力的技术支持;在人们日常生活中,大数据分析的落实能够优化网络体验,得到更为人性化、智能化的信息获取体验。总而言之,大数据分析的重要性是显而易见的,它不仅体现在经济社会发展层面,也作用于人们的日常生活。

二、大数据下的IDA

大数据由于其独特的特性决定了对其进行智能分析的技术必须有新的发展的进步,才能胜任在如此庞大的数据中进行智能分析。有学者指出智能大数据分析技术(Intelligent Data Analysis, IDA)有望成为人工智能的解决之道,目前有很多企业和科研人员提出了很多新的智能分析技术方案。如惠普推出基于HAVEn大数据分析平台、Teradata天睿公司推出的Teradata Aster大数据探索平台(TeradataAster Discovery Platform)以及IBM公司和Intel公司都推出了他们各自的大数据分析方案。这些方案都涉及Hadoop这个大数据分析平台。

Hadoop是Appach基金会支持的一个开源系统,包括两部分,一是分布文件系统、二是分布计算系统。Hadoop在HBase上还提供了一个数据仓库/数据挖掘软件Hive。面向机器学习,还提供了一个机器学习软件包Mahout,从而满足大数据管理和分析的要求。

一方面,大数据分析相比传统的数据分析,具有数据量大、查询分析复杂等特点,因而需要有新的大数据分析方法和理论的出现。一方面人们发现现有的单一智能数据分析方法已经不能全面、高效地胜任数据分析的工作,由此一种趋势是交叉融合多种智能数据分析技术的方法和技术应运而生。如模糊数学和其他理论融合形成了模糊人工神经网络、模糊遗传算法、模糊进化算法、模糊计算学习理论;演化计算和其他理论融合渗透形成了模糊演化算法、演化人工神经网络等。另一方面大数据的智能分析技术的发展还有赖于新型的数据存储和组织技术以及新的高效率的计算方法的支持。数据存储和组织技术应该采用的更好的分布式的数据存储策略,并尽量提高数据的吞吐效率、降低故障率。如谷歌公司的GFS和Hadoop项目的HDFS是两个最知名的分布式文件系统,他们都采用比较新颖的策略。高效率的计算方法有分布式运算、数据流技术、新硬件技术等。

三、常见的数据分析方法

常见的数据分析法主要包括聚类分析、特征数据分析、相关性分析和人工神经网络等。其中聚类分析法主要针对相似性采集信息数据实施有效分类和科学分组,促进相关信息按照分段形式展现。该种方法论尽管看起来是分析各种杂乱数据信息,结合分析目标对各种数据信息实施科学分组,并结合各种数据集内在联系提取有用信息,明确信息价值。在实施聚类分析中存在一定问题,数据具有个性化特征,导致数据统计无法进行合理分析,影响数据识别。

人工神经网络分析即通过模拟大脑神经网络的信息存储、处理方法,对原本混乱、复杂的数据信息实施全面抽象分析,顺利接收计算结果,提取价值信息。比如基于数学模型形成的人工神经网络技术通过创建全新算法,将神经网络数值输入其中。采集各种数据信息中联系现实需求合理分析相关数据,通过数据分析保障人工智能技术合理应用。

相关性分析即借助大数据对数据库内各种数据联系实施科学分析和揭示,借助相关性分析可以帮助针对所采集信息数据实施科学分析,深入挖掘处理各种隐藏信息,准确辨别隐藏数据唯一性,应用该种方法具有较高准确性和目的性,可以支持数据进行精准分析。

四、基于机器学习的大数据分析方法

(一)大数据聚类

传统的聚类技术算法如MapReduce,不能很好地适用于大数据聚类。因此,研究人员也以该法为基础研发出了新型的大数据聚类算法,通过结合映射和归约形成的编程模式。采用这一模式能够进行传统算法的并行运算,并且相比单一的算法更为便捷,此外,还优化了对大数据信息的集合及分类方式。比如K-means聚类算法,以MapReduce作为基础实现凝聚式层次聚类分析,能够有效保证数据信息的准确性以及保密性。并且优化后的算法能够有效提高算法的效率,消除该算法对于迭代的依赖性。同时,针对初始中心在计算过程中存在不稳定的情况,根据数据的密度进行计算,提高聚类的效果,减少计算时间,提高了其稳定性。因此,针对数据信息不断增多,以及人们对数据处理技术有更高的要求的现象,相关研究人员需要对传统的聚类算法进行创新,以增强算法的实用性。

例如,【机器学习与数据挖掘实战】案例02:基于K-Means算法的航空公司客户价值分析,根据聚类结果绘制雷达图,如图所示。相关代码如下。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 客户分群雷达图
cluster_center = pd.read_csv('../tmp/cluster_centers.csv')
labels = pd.read_csv('../tmp/labels.csv')
cluster_center.columns = ['ZL', 'ZR', 'ZF', 'ZM', 'ZC']  # 将聚类中心放在数据框中
cluster_center.index = labels.drop_duplicates().iloc[:, 0]  # 将样本类别作为数据框索引
label = ['ZL', 'ZR', 'ZF', 'ZM', 'ZC']
lstype = ['-','--',':','-.']
legen = ['客户群' + str(i + 1) for i in cluster_center.index]  # 客户群命名,作为雷达图的图例
kinds = list(cluster_center.iloc[:, 0])

# 由于雷达图要保证数据闭合,因此再添加ZL列 ,并转换为 np.ndarray
cluster_center = pd.concat([cluster_center, cluster_center[['ZL']]], axis=1)
centers = np.array(cluster_center.iloc[:, 0:])
# 分割圆周长,并让其闭合
n = len(label)
angle = np.linspace(0, 2 * np.pi, n, endpoint = False)
angle = np.concatenate((angle, [angle[0]]))

# 绘图
fig = plt.figure(figsize = (8, 6))
ax = fig.add_subplot(111, polar = True)  # 以极坐标的形式绘制图形
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号 

# 画线
for i in range(len(kinds)):
    ax.plot(angle, centers[i], linestyle=lstype[i], linewidth=2, label=kinds[i])
# 添加属性标签
ax.set_thetagrids(angle * 180 / np.pi, label)
plt.title('客户特征分析雷达图')
plt.legend(legen)
plt.savefig('客户特征分析雷达图.jpg', dpi=2080) #指定分辨率保存
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述

(二)大数据关联分析

对大数据进行关联分析即找出数据信息之间的因果关系。目前,使用最多的关联分析方法有两种。第一,Apriori算法,该法需要首先设定算法支持阈值,以此为前提进行相关数据信息的采集和分析,找出其关联情况以及规律。这种方法也存在一定的缺陷,比如说花费时间长、建立数据样本数量较多。在实际的应用当中,会对大数据处理产生明显的负面影响。因此,需要对其进行优化,实现并行化计算提高计算效率。并行化计算可以将庞大的数据库进行压缩、分类,减少计算时间,提高计算效率。第二,FP-Growth算法,其主要思想为分而治之,对庞大的数据群进行分块分析,构建频繁模式树来对大数据进行分析,避免大量样本的形成,只需要对数据扫描两次就可以完成计算,得到数据之间的关联规律。该算法能够有效减少计算所需的时间,快速确定频繁项集。现阶段,关联分析技术被运用到了社会上的各个领域当中,比如说交通,通过对海量数据的处理,对车辆的运行特征进行分析,找出其运行规律,减少交通事故的发生次数。针对动车故障问题,借助FP-Growth算法可以进行局部分析,提高数据计算效率,快速找出问题所在,提供解决方案。

例如,【机器学习与数据挖掘实战】案例06:基于Apriori算法的餐饮企业菜品关联分析中的模型训练,最小支持度和最小置信度是没有一个固定值的,要根据训练数据和场景的接受程度进行确定,这里取最小支持度为0.01,最小置信度为0.5,对订单详情表的菜品数据进行关联分析,得出的规则中支持度最高的10条规则如表所示。

自定义包apriori.py代码如下:

# 关联规则算法
# 自定义连接函数,用于实现L_{k-1}到C_k的连接
def connect_string(x, ms):
  x = list(map(lambda i:sorted(i.split(ms)), x))
  l = len(x[0])
  r = []
  for i in range(len(x)):
    for j in range(i,len(x)):
      if x[i][:l-1] == x[j][:l-1] and x[i][l-1] != x[j][l-1]:
        r.append(x[i][:l-1]+sorted([x[j][l-1],x[i][l-1]]))
  return r

# 寻找关联规则的函数(根据二元矩阵)
def find_rule(d, support, confidence, ms = u'--'):
  import pandas as pd
  result = pd.DataFrame(index=['support', 'confidence'])  # 定义输出结果
  
  support_series = 1.0*d.sum()/len(d)  #支持度序列
  column = list(support_series[support_series > support].index)  # 初步根据支持度筛选
  k = 0
  
  while len(column) > 1:
    k = k+1
    print(u'\n正在进行第%s次搜索...' %k)
    column = connect_string(column, ms)
    print(u'数目:%s...' %len(column))
    sf = lambda i: d[i].prod(axis=1, numeric_only = True)  # 新一批支持度的计算函数
    
    # 创建连接数据,这一步耗时、耗内存最严重。当数据集较大时,可以考虑并行运算优化。
    d_2 = pd.DataFrame(list(map(sf,column)), index = [ms.join(i) for i in column]).T
    
    support_series_2 = 1.0*d_2[[ms.join(i) for i in column]].sum()/len(d)  # 计算连接后的支持度
    column = list(support_series_2[support_series_2 > support].index)  # 新一轮支持度筛选
    support_series = support_series.append(support_series_2)
    column2 = []
    
    for i in column: #遍历可能的推理,如{A,B,C}究竟是A+B-->C还是B+C-->A还是C+A-->B?
      i = i.split(ms)
      for j in range(len(i)):
        column2.append(i[:j]+i[j+1:]+i[j:j+1])
    
    cofidence_series = pd.Series(index=[ms.join(i) for i in column2])  # 定义置信度序列
 
    for i in column2:  # 计算置信度序列
      cofidence_series[ms.join(i)] = support_series[ms.join(sorted(i))]/support_series[ms.join(i[:len(i)-1])]
    
    for i in cofidence_series[cofidence_series > confidence].index:  # 置信度筛选
      result[i] = 0.0
      result[i]['confidence'] = cofidence_series[i]
      result[i]['support'] = support_series[ms.join(sorted(i.split(ms)))]
  
  result = result.T.sort_values(['confidence','support'], ascending = False)  # 结果整理,输出
  rule = result.index.tolist()
  result["rule"] = rule
  result = result[["rule","support","confidence"]]
  print(u'\n结果为:')
  print(result)  
  return result

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
from apriori import * 
# 生成关联规则
support = 0.01
confidence = 0.5
ms = "---"
ruledata = pd.read_csv('../tmp/ruledata.csv', encoding='utf-8_sig', index_col=0)
rules = find_rule(ruledata,support,confidence,ms)
# 根据support进行排序
rules = rules.sort_values(by=['support'], axis=0, ascending=False)
# 保留3位小数
rules = rules.round(3)
# 写出生成的关联规则数据
rules.to_csv('../tmp/rules.csv', header=1, index=0, encoding='utf-8_sig')
rules.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

(三)大数据分类

大数据分类技术是数据分析技术中的一个重要组成,可以对海量的数据信息进行整合处理,使其能够分块进行数据分析,提高数据分析的效率,还能够使得有需要的人快速找出自己想要的信息。现阶段,该技术在各行各业中都得到了广泛运用,可以借助数据分类设备对市场营销情况进行分析,判断数据的准确性,其中决策树算法可以运用在营销数据的分类当中,逻辑回归算法可以对产品包装数据进行分析。目前,数据组成趋于复杂,分类算法也需要进行升级才能适应数据的变化。以机器学习为基础的分类方式现阶段受到相关领域研究人员的重点关注,旨在将其和大数据分析进行融合并进行实际的运用。

(四)大数据预测

大数据预测也是当下大数据技术的一个重点研究内容,可以被运用到多个领域。在金融领域当中,借助预测技术可以建立相应的模型对市场的变化进行动态掌握。在智能网络技术领域,借助预测技术可以和云计算进行结合,对网络入侵进行预测和防范,使得网络空间的安全性、隐私性得到一定程度的提高。在医疗领域,以机器学习为前提的预测技术可以提高医疗的准确度,构建模型可以对患者人数进行合理的预测;通过对病人的病理图片进行分析,预测其生存情况,制定科学的治疗方案,提高医疗的个性化程度。目前,大数据预测技术依旧存在一些不足之处,第一,需要找出精确性和效率之间的平衡点,使得效率和精确度均有所保障。第二,难以获取高价值的信息。比如说在监控视频中可能有价值的信息只有几秒钟,但是整体数据是极为庞大的,因此如何快速找出有价值的信息是个待解决的问题。

分类和预测的举例如下。【机器学习与数据挖掘实战】案例05:基于决策树、梯度提升和XGBoost分类算法的O2O优惠券使用预测。采用scikit-learn库的决策树分类器DecisionTreeClassifier,该分类器基于CART决策树进行优化,选择基尼指数(Gini index)最小的作为节点特征,CART决策树是二叉树,即一个节点只分两支。由于本案例是对用户领取优惠券的使用预测,未领取优惠券进行消费的样本不满足分析要求,所以抽取正、负样本进行模型构建与分析。对训练样本建立基于CART的决策树分类模型,并进行预测。

# 决策树分类模型
from sklearn.tree import DecisionTreeClassifier
model_dt1 = DecisionTreeClassifier(max_leaf_nodes=16, random_state=123).fit(x_train.drop(['label'], axis=1), x_train['label'])
# 模型预测
pre_dt = model_dt1.predict(x_test)
# dt_class存放决策树分类预测结果
dt_class = test[['user_id', 'merchant_id', 'coupon_id']]
dt_class['class'] = pre_dt
# 写出决策树分类预测结果
dt_class.to_csv('../tmp/dt_class.csv', index=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

决策树分类模型得到测试样本的部分预测结果如表所示。

user_idmerchant_idcoupon_idclass
92115876024181
2386694515295451
3371615790381371
41269372714134081
2013596790381371
7181491742247270
1094267802284610
100008676024181
208403176024181
142339976024181
68441069619670
5209508264547451
32580243403112140
68973382436124621

(五)大数据智能推荐

现代人在生活中经常遭遇选择困难的问题,在这个信息爆发的时代,飞速增长的信息让人眼花缭乱,不知道如何去选择适合自己的商品。人们往往会询问身边的朋友,请这些“专家”推荐几个他们认为较好的选择。虽然这些建议能帮助我们有效过滤掉一些多余的信息,但并没有考虑到个人个性化的需求,往往是基于更为偏向大众化的需求。

由于不能总是找到一位“专家”提建议,因此人们需要一个更为自动化的工具,这个工具能够分析用户以往的历史数据,以这些数据作为依托,为用户提供更为个性化定制的建议,这就是智能推荐系统。推荐系统作为连接消费者与生产者的桥梁起到了非常关键的作用,消费者通过推荐系统从大量同类商品中能更为轻松的找到自己感兴趣的商品,而生产者也能通过推荐系统从大量竞争者中脱颖而出,得到自己的目标用户的青睐。

例如,【机器学习 | 数据挖掘】智能推荐算法,在Python中实现基于用户的协同过滤算法进行个性化电影推荐。将原始的事务性数据导入Python中,因为原始数据无字段名,所以首先需要对相应的字段进行重命名,再运行基于用户的协同过滤算法。得到用户预测评分数据和用户推荐列表数据,如下所示。

# 使用基于UBCF算法对电影进行推荐
import pandas as pd
from recommender import recomm  # 加载自编推荐函数

# 读入数据
traindata = pd.read_csv('../data/u1.base', sep='\t', header=None, index_col=None)
testdata = pd.read_csv('../data/u1.test', sep='\t', header=None, index_col=None)
# 删除时间标签列
traindata.drop(3, axis=1, inplace=True)
testdata.drop(3, axis=1, inplace=True)
# 行与列重新命名
traindata.rename(columns={0: 'userid', 1: 'movid', 2: 'rat'}, inplace=True)
testdata.rename(columns={0: 'userid', 1: 'movid', 2: 'rat'}, inplace=True)
traindf = traindata.pivot(index='userid', columns='movid', values='rat')
testdf = testdata.pivot(index='userid', columns='movid', values='rat')
traindf.rename(index={i: 'usr%d' % (i) for i in traindf.index}, inplace=True)
traindf.rename(columns={i: 'mov%d' % (i) for i in traindf.columns}, inplace=True)
testdf.rename(index={i: 'usr%d' % (i) for i in testdf.index}, inplace=True)
testdf.rename(columns={i: 'mov%d' % (i) for i in testdf.columns}, inplace=True)
userdf = traindf.loc[testdf.index]
# 获取预测评分和推荐列表
trainrats, trainrecomm = recomm(traindf, userdf)
print('用户预测评分的前5行:\n', trainrats.head())

# 保存预测的评分
trainrats.to_csv('../tmp/movie_comm.csv', index=False, encoding='utf-8')
print('用户推荐列表的前5行:\n', trainrecomm[:5])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

在这里插入图片描述

五、基于深度学习的大数据分析方法

自2006年开始,深度学习成为机器学习的重要学习方法之一,在大数据分析中,其主要应用于图像、自然语言处理以及语音等领域。在大数据分析过程中,评价其明显的计算密集性特点,深度学习训练的使用需要确定隐层权值与阈值参数等,然后依托于大量的迭代计算完成相关分析工作。

以中等规模的数据为例,即便仅有几个隐层,但每个隐层均具有几百个节点的深层网络,学习时间在几天或几周之间。数据规模与模型训练时间存在正比关系,在庞大的训练量下,主要采用分布式的方式降低深度学习训练成本,具体实现方式包括:

  • 以MapReduce为基础的深度学习分布式方式,能够有效提升大量数据的处理速度,解决深度学习的可拓展问题,减少网络节点的通信代价;
  • 以Spark为基础的深度学习分布式方式,以内存为基础开展大数据计算工作,相较于第一种算法,这种学习方法更适用于迭代型计算任务,目前常用的学习模式有R_CRBN模型、卷积神经网络等。因而,通过在大数据分析中运用该技术功能,能够直观的将复杂信息呈现给用户,帮助其根据分析结果对未来做出精准预测。

除此之外,现有的以大数据分析优化为目标的深度学习算法正处于不断改进状态,针对样本数量缺乏、质量不足等常见问题,固定模型重用策略被提出并应用,能够很好地获取判别信息,降低数据分析过程中需要投入的训练样本数量。此外,强化检测器性能、改进训练样本质量的方法不断丰富,根据深度学习一训练步骤实现对各种数据的迭代计算,从而改变当前的工作质量。

(一)Submarine(Hadoop生态系统)

Hadoop是用于大型企业数据集的分布式处理的最流行的开源框架,它在本地和云端环境中都有很多重要用途。深度学习对于语音识别,图像分类,AI聊天机器人,机器翻译等领域的企业任务非常有用,仅举几例。为了训练深度学习/机器学习模型,可以利用 TensorFlow / MXNet / Pytorch / Caffe / XGBoost 等框架。有时需要将这些框架进行组合使用以用于解决不同的问题。

为了使分布式深度学习/机器学习应用程序易于启动,管理和监控,Hadoop社区启动了Submarine项目以及其他改进,例如一流的GPU支持,Docker容器支持,容器DNS支持,调度改进等。

这些改进使得在 Apache Hadoop YARN 上运行的分布式深度学习/机器学习应用程序就像在本地运行一样简单,这可以让机器学习工程师专注于算法,而不是担心底层基础架构。通过升级到最新的Hadoop,用户现在可以在同一群集上运行其他 ETL / streaming 作业来运行深度学习工作负载。这样可以轻松访问同一群集上的数据,从而实现更好的资源利用率。

Submarine是Apache Hadoop生态系统中的一个机器学习平台,它支持在大数据环境中进行模型训练和推理。以下是一个基于Submarine的Python代码片段,用于在Hadoop集群中启动一个机器学习任务。

from submarine.client import SubmarineClient
from submarine.model import Model
from submarine.trainer import Trainer

# 初始化Submarine客户端连接到Hadoop集群
submarine_client = SubmarineClient(host='hadoop-cluster-url', port=8080)

# 创建一个模型对象
model = Model(
    name="my-model",
    algorithm="tensorflow",
    version="2.3",
    input_data_path="hdfs://path/to/input/data",
    output_data_path="hdfs://path/to/output/data"
)

# 配置训练器
trainer = Trainer(
    model=model,
    epochs=10,
    batch_size=32,
    learning_rate=0.001
)

# 提交训练任务
trainer.submit()

# 监控训练任务进度
while trainer.is_running():
    print("Training in progress...")
    time.sleep(30)

# 训练完成后获取模型
trained_model = trainer.get_trained_model()

# 模型推理
inference_result = trained_model.predict("hdfs://path/to/test/data")
print("Inference result:", inference_result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

在这个例子中,SubmarineClient用于连接到Hadoop集群,Model类定义了机器学习模型的配置,Trainer类负责提交并监控模型训练过程。

(二)DL4J(deeplearning4j,java深度学习框架)

DL4J (Deeplearning4j) 是Skymind开源并维护的一个基于JVM的深度学习框架。也是在Spark平台上可以原生支持分布式模型训练的为数不多的框架之一。DL4J还支持多GPU集群,可以与高性能异构计算框架无缝衔接,进一步提升运算性能。

DL4J是用Java和Scala编写,通过与Hadoop和Spark集成来处理大规模数据。其内部采用Java N维数组实现的库即ND4J (N-Dimensional Arrays For Java),处理多样的n维数组对象。ND4J支持GPU计算,有助于加快深度学习迭代训练速度。ND4J实际就是一个科学计算库,属于低阶API,而DL4J属于高阶API,类似Keras。DL4J中除了ND4J外,还有DataVec (用于数据集的加载和转换),SameDiff (基于图的自动微分、深度学习框架),Arbiter (超参数搜索),LibND4J (底层C++库,调用cuDNN、OpenBLAS等库支持CPU/GPU计算)。ND4J通过这些库共同支撑基于JVM的深度学习应用程序的所有需求。

DL4J将数据集处理与算法模型训练分开处理,使用DataVec库加载和转换数据集,使用张量和ND4J库训练模型。通过DataVec库的RecordReaderDataSetIterator获取数据,ND4J库的DataSet (存储数据特征和标签的容器) 对训练数据进行封装,可以封装单条训练数据,也可以封装一个Mini-batch,每一次迭代用一个DataSet更新神经网络中参数。在DL4J中构建训练数据集,最终就是生成一个DataSet迭代器或DataSet序列。

下面是一个基于DL4J(DeepLearning4J)的简单Java代码片段,演示如何创建一个神经网络并进行训练。这段代码创建了一个简单的前馈神经网络(3层),适用于多分类问题(假设输出为10个类别)。使用ReLU激活函数在隐藏层中,Softmax激活函数在输出层中。使用了交叉熵损失函数(适用于多分类问题)和随机梯度下降(SGD)优化算法。需要根据实际数据集将训练部分的数据加载与训练过程实现(比如DataSetIterator和输入数据)。

import org.deeplearning4j.datasets.iterator.impl.MnistDataSetIterator;
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.DenseLayer;
import org.deeplearning4j.nn.conf.layers.OutputLayer;
import org.deeplearning4j.nn.conf.layers.InputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.lossfunctions.LossFunctions;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;

public class DL4JExample {

    public static void main(String[] args) throws Exception {
        // 定义神经网络配置
        NeuralNetConfiguration.ListBuilder config = new NeuralNetConfiguration.Builder()
                .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)  // 使用随机梯度下降
                .iterations(1)  // 设置迭代次数
                .learningRate(0.01)  // 设置学习率
                .updater(org.deeplearning4j.nn.conf.Updater.SGD)  // 更新器
                .list()
                .layer(0, new InputLayer.Builder().nIn(784).nOut(256)  // 输入层,假设每个输入样本有784个特征
                        .activation(Activation.RELU)
                        .build())
                .layer(1, new DenseLayer.Builder().nIn(256).nOut(128)  // 第一隐藏层
                        .activation(Activation.RELU)
                        .build())
                .layer(2, new DenseLayer.Builder().nIn(128).nOut(64)  // 第二隐藏层
                        .activation(Activation.RELU)
                        .build())
                .layer(3, new OutputLayer.Builder().nIn(64).nOut(10)  // 输出层,假设有10个类别
                        .activation(Activation.SOFTMAX)
                        .lossFunction(LossFunctions.LossFunction.MCXENT)  // 多分类交叉熵损失函数
                        .build());

        // 创建神经网络模型
        MultiLayerNetwork model = new MultiLayerNetwork(config.build());
        model.init();

        // 加载MNIST数据集(用于手写数字分类)
        DataSetIterator mnistTrain = new MnistDataSetIterator(64, true, 12345);  // 每批次64个样本
        DataSetIterator mnistTest = new MnistDataSetIterator(64, false, 12345);

        // 训练模型
        for (int epoch = 0; epoch < 10; epoch++) {  // 训练10轮
            model.fit(mnistTrain);  // 训练一个epoch
            System.out.println("Epoch " + epoch + " complete");
        }

        // 测试模型
        System.out.println("Evaluating model...");
        org.deeplearning4j.eval.Evaluation eval = new org.deeplearning4j.eval.Evaluation();
        while (mnistTest.hasNext()) {
            org.nd4j.linalg.dataset.api.DataSet testData = mnistTest.next();
            INDArray output = model.output(testData.getFeatures());
            eval.eval(testData.getLabels(), output);  // 评估预测结果
        }

        // 输出评估结果
        System.out.println(eval.stats());

        // 进行一次预测
        INDArray example = mnistTest.next().getFeatures();
        INDArray prediction = model.output(example);
        System.out.println("Prediction: " + prediction);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 模型架构:输入层(784个神经元,假设每个输入样本是28x28的图像展开后的向量);两个隐藏层,每个隐藏层使用ReLU激活函数;输出层有10个神经元,使用Softmax激活函数,适用于多分类任务。
  • 训练过程:使用MnistDataSetIterator加载MNIST手写数字数据集(训练集和测试集);每个batch有64个样本,训练10轮(epochs)。
  • 评估:使用Evaluation类对模型的准确度进行评估,输出各种性能指标。
  • 预测:从测试集中获取一个样本,使用训练好的模型进行预测,输出结果。

注意:该示例使用了MNIST数据集,它是一个包含28x28像素手写数字的标准数据集,适用于多分类任务。如果要应用到自己的数据集上,需要自定义数据加载和预处理过程。

更多关于大数据深度学习的内容,可以阅读我的这篇博客:【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

六、以计算智能为基础的大数据分析

计算智能为人工智能分支之一,其具有随机性、启发式特征,在大规模优化方面能够发挥良好作用,而传统算法以收敛速度为侧重点,强调集中化思想,若所需分析的数据过于庞大,则会使传统算法难以处理,即使能够处理分析也会形成较大时间消耗,数据分析效率严重不足。而当前数据复杂性、规模化程度日益增加,此时可在大数据分析时引入分布式算法,从群智能、进化算法两个方面展开大数据分析。

  • 群智能算法分析。其构建了分布式计算环境,对算法搜索过程具有较强加速效果,其主要借助粒子群算法、布谷鸟算法、蚁群算法、萤火虫算法等顺利完成大数据分析。
  • 进化算法分析。该算法分析方式含有大量迭代计算,在具体大数据分析过程中,主要通过大数据分组保障运算分析效率,通过长期的进化算法研究,进化算法现已能够实现差分自动分组,降低不同分组内的变量依赖程度,借助智能化分析提高算法分析效率,以此解决传统算法在预算效率方面的不足。

除此之外,大数据分析时还可混合运用多种算法,如贪心算法、遗传算法、模拟退火算法等,同时融入加速技术、分布式计算等,对原算法精准优化,继而提高数据分析效率。

七、人工智能与大数据的结合

人工智能(AI)与大数据(Big Data)的结合被视为科技领域的一次革命性融合。AI依赖于大数据的海量信息进行学习和决策,而大数据则通过AI技术的处理和分析获得更深层次的洞察和应用。这种技术融合不仅加速了创新的步伐,还重新定义了许多行业的运作方式。

(一)技术融合的必要性

在这里插入图片描述

1. 为什么人工智能需要大数据?

(1)数据是AI的燃料:人工智能特别是机器学习和深度学习,需要大量的数据来训练模型。充足的数据可以提高模型的精确度和泛化能力,使得AI系统能够在不同环境中表现出色。例如,图像识别系统需要成千上万张标注的图像来训练模型,以便它能够准确地识别和分类新图像。

(2)模式识别和预测:大数据提供了丰富的模式和关系,AI可以从中学习并进行预测。例如,社交媒体数据可以用于训练情感分析模型,预测用户的情感倾向和行为。通过大数据中的历史数据,AI可以识别出隐藏的趋势和模式,进行更准确的预测和决策。

(3)持续学习和改进:大数据使AI系统能够持续获取新的数据进行学习和改进,保持模型的最新性和准确性。例如,搜索引擎不断收集用户搜索行为数据,改进搜索算法,提供更相关的搜索结果。

2. 为什么大数据需要人工智能?

(1)高效的数据处理和分析:大数据量巨大且复杂,传统的数据处理方法难以高效处理和分析。AI技术如机器学习和深度学习可以快速从大规模数据中提取有价值的信息。例如,深度学习算法可以从大量的非结构化数据(如图像、视频、文本)中进行自动分类和标注,提高数据处理效率。

(2)复杂关系的挖掘:大数据中的复杂关系和模式需要先进的分析工具来挖掘。AI可以通过复杂的算法和模型,发现数据中的隐藏关联和模式。例如,在金融领域,AI可以通过分析大量的交易数据,发现潜在的欺诈行为和风险模式。

(3)自动化和智能化决策:AI可以自动化处理和分析大数据,进行智能化决策,减少人为干预和错误。例如,智能推荐系统通过分析用户的历史行为数据,自动生成个性化的推荐,提高用户体验和满意度。

(二)融合的具体案例

1. 数据驱动的人工智能模型训练

(1)自动驾驶:自动驾驶汽车需要大量的驾驶数据进行训练,包括图像、视频、激光雷达数据等。通过大数据,AI系统可以学习识别道路、行人、交通信号等,实现自动驾驶功能。例如,特斯拉的自动驾驶系统通过收集全球车辆的数据,不断改进其自动驾驶算法,提高驾驶安全性和可靠性。

(2)医疗诊断:医疗AI系统通过大量的病历数据、影像数据、基因数据等进行训练,辅助医生进行疾病诊断和治疗方案制定。例如,IBM Watson 通过分析大量的医学文献和病例数据,提供癌症治疗建议,帮助医生制定个性化的治疗方案。

2. 大数据分析中的人工智能技术应用

(1)市场营销:AI技术可以分析大量的市场数据和消费者行为数据,发现潜在的市场趋势和商机,制定精准的营销策略。例如,亚马逊通过分析用户的浏览和购买行为,使用机器学习算法进行个性化推荐,增加销售额和用户黏性。

(2)金融风险管理:金融机构通过AI技术分析海量的交易数据、信用记录、市场数据等,进行风险评估和预测,制定风险管理策略。例如,高盛通过机器学习算法分析市场数据和交易行为,预测市场趋势和风险,优化投资组合和交易策略。

(3)智能城市管理:AI技术用于分析城市中的各种数据,包括交通数据、环境数据、公共安全数据等,实现智能城市管理。例如,新加坡通过AI分析交通流量数据,优化交通信号灯控制,减少交通拥堵,提高交通效率。

通过以上分析可以看出,人工智能与大数据的融合在多个领域展现出巨大的潜力和优势。AI依赖大数据进行训练和学习,而大数据需要AI进行高效处理和分析。这种相互依赖和协同作用推动了技术的快速发展和创新应用。未来,随着技术的不断进步,两者的融合将继续深化,带来更多的创新和变革。

小结

我国的大数据技术和人工智能已经在逐渐进行融合,并且在一些领域也进行了广泛的使用,但是为了对大数据分析技术进行优化,需要有针对性地完善大数据聚类技术、关联分析技术、预测技术以及分类技术,并且对模型进行优化,提高算法的精确性和适用性,这在未来依旧是一个重点研究方向。

在当下必须要对人工智能技术基础上的大数据分析方法提高重视,并且充分理解人工智能技术下大数据分析的应用领域,大数据分析、聚类关联以及预测和分类都会朝着更加智能、更加前景化的方向发展。虽然目前还需要不断完善各类算法以及降低时间和成本等,但是只要能够真正地提高对这一方面的重视程度,并且充分认识到人工智能技术基础上的大数据分析方法的主要作用,就能够更好地将二者结合起来。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:
https://cloud.tencent.com/developer/support-plan?invite_code=j48dyh0fmz8

学习交流 | 商务合作 (备注来意)
微信名片
注:本文转载自blog.csdn.net的Francek Chen的文章"https://blog.csdn.net/Morse_Chen/article/details/145211460"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

111
大数据
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top