大数据分析技术

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

目录

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

任务2:在了解如何实现单层神经网络后,现设计一个具有三个隐藏层的神经网络,并根据四个特征值实现对鸢尾花的分类。代码如下:

 

#coding:utf-8
 
import numpyas np
 
import pandas as pd
 
import matplotlib.pyplotas plt
 
import tensorflowas tf
 
from sklearn.model_selection import train_test_split
 
from sklearnimport preprocessing
 
 
plt.rcParams['font.sans-serif'] = ['SimHei']
 
plt.rcParams['axes.unicode_minus'] = False
 
 
df= pd.read_csv('iris.csv', delimiter=',')
 
#对类别进行数值化处理
 
le = preprocessing.LabelEncoder()
 df[
'Cluster'] = le.fit_transform(df['Species'])
 x = df[[
'SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm']]
 y = df[[
'Cluster']]
 sess = tf.Session()

 
seed = 2
 
tf.set_random_seed(seed)
 np.random.seed(seed)
 
#创建训练集与测试集的划分
 
x_train, x_test,y_train, y_test=train_test_split(x, y, train_size=0.8, test_size=0.2)
 
# 添加占位符,四个输入
 
x_data = tf.placeholder(shape=[None, 4], dtype=tf.float32)

 

# 添加占位符,一个输出
 y_target = tf.placeholder(
shape=[None, 1], dtype=tf.float32)
 
# 定义如何添加一个隐藏层的函数
 
def add_layer(input_layer, input_num, output_num):
     weights =  tf.Variable(tf.random_normal(
shape=[input_num,  output_num]))
    
biase =  tf.Variable(tf.random_normal(shape=[output_num]))
     hidden_output = tf.nn.
relu(tf.add(tf.matmul(input_layer, weights),  biase))
    
return hidden_output
 
# 定义三个隐藏层对应的结点个数
 
hidden_layer_nodes = [10,8,10]
 hidden_output = add_layer(x_data,
4, hidden_layer_nodes[0])

 

# 循环添加三个隐藏层
 
for i in range(len(hidden_layer_nodes[:-1])):
     hidden_output =  add_layer(hidden_output, hidden_layer_nodes[i],hidden_layer_nodes[i +
1])
 final_output = add_layer(hidden_output,hidden_layer_nodes[-
1],1)
 
# 定义损失函数,使得误差最小
 
loss = tf.reduce_mean(tf.square(y_target - final_output))
 #
设置学习率来调整每一步更新的大小
 
my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.00004)
 
# 优化目标:最小化损失函数
 
train_step = my_opt.minimize(loss)
 init = tf.global_variables_
initializer()
 sess.run(init)
 loss_
vec = [] #训练操
 
test_loss = [] #测试操失
 #
训练次数
 
for i in range(10000):
    
#训练
    
sess.run(train_step,  feed_dict={x_data:x_train,  y_target:y_train})
    
#训练数据评估模型
    
temp_loss =  sess.run(loss, feed_dict=  {x_data:x_train, y_target:y_train})
     loss_
vec.append(np.sqrt(temp_loss))
    
#测试数据评估模型
    
test_temp_loss =  sess.run(loss, feed_dict=  {x_data:x_test, y_target:y_test})
     test_loss.append(np.
sqrt(test_temp_loss))
    
if (i+1)%1000 == 0:
        
print('Generation:' + str(i+1) + '.Loss = ' + str(temp_loss))
 
 test_
preds = [np.round(item,0) for item in sess.run(final_output,feed_dict={x_data:x_test})]
 train_
preds = [np.round(item,0) for item in sess.run(final_output,feed_dict={x_data:x_train})]
 y_test = [i
for i in y_test['Cluster']]
 y_train = [i
for i in y_train['Cluster']]
 
 test_acc = np.mean([i==j
for i, j in zip(test_preds, y_test)]) * 100
 
train_acc =  np.mean([i==j for i, j in zip(train_preds, y_train)]) * 100
 
print('训练数据预测精确度:{}'.format(train_acc))
 
print('测试数据训练精确度:{}'.format(test_acc))
 
 
plt.plot(loss_vec, 'k-', label ='训练损失')
 
plt.plot(test_loss,  'r--', label ='测试损失')
 
plt.title('损失')
 
plt.xlabel('迭代次数')
 
plt.ylabel('损失')
 
plt.legend(loc='upper right')
 
plt.show()

 

运行上述代码,部分迭代输出结果及预测精确度如下图所示:


下图所示的是不断迭代过程中损失函数的变化。为优化模型,需要根据结果,修改相应参数。