大数据分析技术

陈清华、田启明、施郁文等

目录

  • 课程简介
    • ● 课程简介
  • 环境准备
    • ● Anaconda环境安装与使用
    • ● Pycharm环境安装
    • ● 常用第三方包的安装与配置
  • 项目一 电影数据统计
    • ● 任务简介
    • ● 数据获取
    • ● 数据解析
    • ● 数据分析
    • ● 数据可视化
    • ● 课堂思政:新型冠状病毒疫情分析与可视化
    • ● 课堂思政:中国工匠精神
  • 项目二 电影数据分析(回归)
    • ● 任务简介
    • ● 使用一元线性回归分析电影票房数据
    • ● 使用多项式回归分析电影票房数据
    • ● 使用多元线性回归分析电影票房数据
    • ● 课堂实训:工资分析
  • 项目三 爬取房产租赁数据
    • ● 任务简介
    • ● 电影数据爬取
    • ● 房产租赁数据爬取
    • ● 房产租赁数据统计
    • ● 课后实训:二手房数据爬取
    • ● 课堂思政:疫情数据的爬取与可视化
  • 项目四 房屋租赁数据分析与可视化
    • ● 任务简介
    • ● 使用箱形图展现租赁价格分布特征
    • ● 使用散点图展现房屋面积与租赁价格的关系
    • ● 使用饼图展现不同行政区域的可租赁房源占比
    • ● 使用折线图可视化房间数与租赁价格的关系
    • ● 使用热力图展现地理位置的影响
    • ● 课后实训:二手房数据分析
    • ● 课堂思政:疫情数据分析与可视化
  • 项目五 身高与体重数据分析(分类器)
    • ● 使用身高、体重数据进行性别分类
      • ● 使用逻辑回归进行性别分类
      • ● 使用朴素贝叶斯进行性别分类
      • ● 使用决策树模型进行性别分类
      • ● 使用支持向量机进行性别分类
    • ● 使用支持向量机进行肥胖程度分类
    • ● 课后实训: 身高体重数据分析(分类器)
  • 项目六 鸢尾花分类
    • ● 任务简介
    • ● 使用K近邻对鸢尾花进行分类
    • ● 使用随机森林对鸢尾花进行分类
    • ● 使用神经网络对鸢尾花进行分类
  • 项目七 电影评分数据分析(聚类)
    • ● 任务简介
    • ● 使用BDSCAN确定质心个数
    • ● 使用K-Means对观影用户进行聚类
  • 项目八 人脸检测与人脸识别
    • ● 任务简介
    • ● 图像中的人脸检测
    • ● 视频中的人脸检测
    • ● 图像中的人脸识别
    • ● 视频中的人脸识别
    • ● 课后实训:眼睛与笑脸检测
    • ● 课堂思政:人工智能与弯道超车
  • 项目九 手写数字识别应用
    • ● 任务简介
    • ● 图像数据集准备
    • ● 使支持向量机识别手写数字
    • ● 使用神经网络识别手写数字
    • ● 课后实训:使用不同的机器学习方法识别数字手写体
  • 项目十  深度学习在行为识别中的应用
    • ● 任务简介
    • ● 使用卷积神经网络识别行为
    • ● 使用循环神经网络识别行为
    • ● 课后实训:电影评论数据分析
  • 项目十一 TensorFlow与神经网络
    • ● 任务简介
    • ● 使用单层神经网络预测花瓣宽度
    • ● 设计多层神经网络实现鸢尾花分类
    • ● 课后实训:卷积神经网络的实现与应用
  • 项目综合实训(17级学生案例)
    • ● 综合实训要求
    • ● 确定数据采集目标
    • ● 数据采集与预处理
    • ● 数据统计与分析
    • ● 数据分析与预测
    • ● 数据分类应用
    • ● 17级实训案例:二手车数据获取与市场分析
使用卷积神经网络识别行为

环境准备

Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。同时,使用Keras可以简单地搭建深度学习模型,进行模型训练和预测,对于新手,能够有助于快速理解并运用该深度学习框架。


本章搭建的模型都是通过Keras实现。要使用Keras,需要安装必要的NumPy、Pandas等包,同时还需要安装深度学习包TensorFlow和Keras。

通过快捷键WIN键+R键打开cmd命令窗口,通过输入命令pipinstall tensorflowt和pip install keras分别安装TensorFlow和Keras包。主要运行如下代码:

 pip install tensorflow
 pip install keras

    安装成功后,我们就可以进入下一步的学习和操作了。

数据获取与解析

人体携带装有相应传感器(加速度计、陀螺仪等)的手机即可获得相应的数据。当然,网络上也很多数据可以直接拿来用做训练,我们可以通过链接(https://archive.ics.uci.edu/ml/machine-learning-databases/00240)下载相应的数据包。该数据包中的数据集由30名年龄在19~30岁志愿者完成。每位志愿者腰间佩戴智能手机(三星Galaxy S II)进行6项活动(散步、上楼散步、下楼散步、坐下、站立、躺下)。利用其内置的加速度计和陀螺仪进行收集。采集过程中,以恒定的频率捕捉了线性加速度和角速度。

这些实验数据被存储下来,并用人工进行了标注。所获得的数据集被随机分成两组,其中:70%的志愿者被选中生成训练数据,30%的志愿者被选中生成测试数据。

传感器信号(加速度计和陀螺仪)通过应用噪声滤波器进行预处理,然后在2.56秒和50%重叠(128个读数/窗口)的固定宽度滑动窗口中采样。利用巴特沃斯低通滤波器将传感器加速度信号分解为物体加速度和重力信号,传感器加速度信号由重力分量和物体运动分量组成。假设重力只有低频分量,因此使用了截止频率为0.3Hz的滤波器。在每个窗口中,通过计算时间域和频率域的变量得到特征向量。简言之,这些下载下来的数据已经经过噪声去除处理,并通过2.56秒时长对传感器数据采样分离。

具体数据集中包括:

(1)“features_info.txt”:显示有关在特征向量上使用的变量信息。

(2)“features.txt”:所有功能的列表。

(3)“activity_labels.txt”:类标签与其活动名称对应关系。

(4)“train/x_train.txt”:训练集数据。

(5)“train/y_train.txt”:训练集标签。

(6)“test/x_test.txt”:测试集数据。

(7)“test/y_test.txt”:测试集标签。

以下文件可用于训练和测试,主要有:

(1)“train/subject_train.txt”:标识为每个窗口活动的主体。范围从1到30。

(2)“train/Inertial Signals/total_acc_x_train.txt”:来自智能手机加速度计X轴的加速度信号,标准重力单位为“g”。每行显示一个128值的向量。 “ToothAcxxxSuff.txt”和“ToothAcAccZZReal.Txt”文件对应与Y轴和Z轴的数据。

(3)“'train/Inertial Signals/body_acc_x_train.txt'”:从总加速度中减去重力得到的加速度信号。

(4)“train/Inertial Signals/body_gyro_x_train.txt”:陀螺仪中每个窗口样本测量的角速度矢量。单位是弧度/秒。

行为数据分析

在应用前,对训练和测试数据进行统计分析,结果如下图所示。左图中显示的是训练样本中各个行为的数量统计,根据柱状图可以看出,各个行为数量基本均衡,没有特别多或者特别少。因此,数据不需要做其它处理。右图测试样本的行为数量统计,6个行为数据也是平衡的,适合各个行为的预测评估。

    

(a)训练集中的行为数据统计    (b) 测试集中的行为数据统计


应用卷积神经网络

任务1:使用卷积神经网络CNN进行行为识别。

  • 步骤一:读取训练数据,参考代码如下: 

 

import pandas  as pd
 
import numpy as np
 
# 数据集文件夹名
 
DATADIR = 'UCI HAR Dataset'
 
#各个传感器方向名
 
SIGNALS = [
    
"body_acc_x","body_acc_y","body_acc_z","body_gyro_x","body_gyro_y","body_gyro_z","total_acc_x","total_acc_y","total_acc_z"
 
]
 
# 定义读取数据方法
 
def load_x(subset):
     signals_data = []
    
for signal  in SIGNALS:
        
#数据集的文件夹位置
        
filename  = '{0}/{1}/Inertial Signals/{2}_{1}.txt'.format(DATADIR,subset,signal)
         signals_data.append(
             pd.read_csv(filename,
delim_whitespace=True,  header=None).values
         )
    
return  np.transpose(signals_data, (1,  2,  0))
 
# 定义读取标签方法
 
def load_y(subset):
     filename =
'{0}/{1}/y_{1}.txt'.format(DATADIR,subset)
     y = pd.read_csv(filename,
delim_whitespace=True,  header=None)[0]
    
return  pd.get_dummies(y).values
 
# 定义加载数据
 
def load_data():
     x_train, x_test = load_x(
'train'),  load_x('test')
     y_train, y_test = load_y(
'train'),  load_y('test')
    
return  x_train, x_test, y_train, y_test
 
# 运行加载数据
 
X_train, X_test, Y_train, Y_test = load_data()

 
  • 步骤二:设置参数,参考代码如下:

 

conv_size1 = 64 # 第一次卷积得到特征图个数
 
conv_size2 = 32 # 第二次卷积得到特征图个数
 
kernel_size = 3 # 卷积核大小
 
timesteps=128   # 步长
 
input_dim=9     # 维度
 
n_classes=6     # 类别个数
 
pool_size=2     # 池化大小
 
batch_size = 16  # 每个批次大小
 
epochs = 30      # 训练次数

 
  • 步骤三:定义模型,并使用上述获得的数据进行训练,参考代码如下:

 

from keras.models  import Sequential
 
from keras.layers import  AveragePooling1D,Dense,Conv1D,Flatten,Activation
 model = Sequential()
 model.add(Conv1D(conv_size1,
kernel_size=kernel_size,  padding='same', input_shape=(timesteps, input_dim)))
 model.add(AveragePooling1D(
pool_size=pool_size))
 model.add(Conv1D(conv_size2,
padding='same',kernel_size=kernel_size))
 model.add(Activation(
'relu'))
 model.add(Flatten())       
 model.add(Dense(n_classes,
activation='softmax'))
 model.compile(
loss='categorical_crossentropy',  optimizer='rmsprop',metrics=['accuracy'])
 model.fit(X_train,
           Y_train,
          
batch_size=batch_size,
           
validation_data=(X_test,  Y_test),
          
epochs=epochs)

 

训练过程数据显示如下:


最终显示,精确率约为90.53%。

  • 步骤四:使用测试数据对模型评估,参考代码如下:

 

scores = model.evaluate(X_test,Y_test)
 
print(scores[1])

 

运行结果显示如下:

 用测试数据进行模型评估,其预测准确率约为90.53%。此外,我们还可以使用混淆矩阵来查看具体的结果,参考代码如下:

 

predicts = model.predict(X_test)
 ACTIVITIES = {
0: '',1:  '上楼',2:  '下楼',3:  '',4:  '',5:  ''}
 
def confusion_matrix(Y_true, Y_pred):
     Y_true = pd.Series([ACTIVITIES[y]
for  y in np.argmax(Y_true,  axis=1)])
     Y_pred = pd.Series([ACTIVITIES[y]
for  y in np.argmax(Y_pred,  axis=1)])
    
return  pd.crosstab(Y_true, Y_pred, rownames=['True'],  colnames=['Pred'])
 
print(confusion_matrix(Y_test,predicts))

 

具体预测结果如下表所示。



  • 模型应用:Keras训练得到的模型,可以直接导出应用于APP。