大数据分析技术

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

目录

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

什么是K-Means

K-Means算法是最流行的聚类算法之一。其中,K表示类别数,Means表示均值。顾名思义K-Means是一种通过均值对数据点进行聚类的算法。K-Means算法通过预先设定的K值及每个类别的初始质心对相似的数据点进行划分,并通过划分后的均值迭代优化获得最优的聚类结果,即让各组内的数据点与该组中心点的距离平方和最小化。

K值是聚类结果中类别的数量。简单地说就是我们希望将数据划分的类别数。K值决定了初始质心的数量,K值为几则就表示有几个质心。如图7.3所示,其K值为3,质心数即为3。选择最优K值没有固定的公式或方法,需要人工来指定。一般,建议根据实际的业务需求,或通过层次聚类(Hierarchical Clustering)等方法获得数据的类别数量作为选择K值的参考。需要注意的是:选择较大的K值可降低数据的误差,但会增加过拟合的风险。


    实现时,先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

sklearn中,包括两个K-Means的算法,一个是传统的K-Means算法,对应的类是KMeans。另一个是基于采样的Mini Batch K-Means算法,对应的类是MiniBatchKMeans。使用K-Means算法调相对简单,一般要特别注意的是K值的选择,即参数n_clusters。

任务2:在以上DBSCAN聚类分析结果的基础上,使用K-Means对相似数据进行聚类,并设置相应的K值(质心个数)为上一任务中得出的结果:4。

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

 #!/usr/bin/Python

 # -*- coding: utf-8 -*-
 
import numpyas  np
 
import pandas as pd
 
# 加载数据
 
data = pd.read_csv('filmScore.csv',header=None)

 

data.head()

 

X = data[['filmname1','filmname2']]

    读取的部分数据结果如图所示。


  • 步骤二:展现并观察、分析原始数据的分布特征。

 import matplotlib.pyplotas  plt
 

 from pylabimport  mpl
 mpl.
rcParams['font.sans-serif']  = ['SimHei']
 mpl.
rcParams['axes.unicode_minus']  = False

plt.figure()
plt.scatter(data['filmname1'], data['filmname2'], marker='o',
       
facecolors='yellow', edgecolors='red', s=30, alpha=0.5)
x_min, x_max =
min(data['filmname1']) - 1, max(data['filmname1']) + 1
y_min, y_max = min(data['filmname2']) - 1, max(data['filmname2']) + 1
plt.title('输入数据(二维)')
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.xticks(())
plt.yticks(())

 plt.show()

原始数据的分布特征如图所示。


  • 步骤三:确定K-means的质心个数,并进行模型训练,代码如下:

 from sklearnimport  metrics

 from sklearn.cluster  import KMeans

 

# 训练
 
num_clusters = 3
 
kmeans  = KMeans(init='k-means++', n_clusters=num_clusters, n_init=10)
 
kmeans.fit(X)

 

# 分类结果

 

step_size = 0.01
 
x_values,  y_values = np.meshgrid(np.arange(x_min,  x_max, step_size), np.arange(y_min,  y_max, step_size))

 

predicted_labels = kmeans.predict(np.c_[x_values.ravel(),  y_values.ravel()])
predicted_labels =  predicted_labels.reshape(x_values.shape)

 
  • 步骤四:可视化展现分类结果,代码如下:

  # 可视化

  plt.figure()
 
plt.clf()
 
plt.imshow(predicted_labels, interpolation='nearest',
          
extent=(x_values.min(), x_values.max(), y_values.min(), y_values.max()),
          
cmap=pltNaN.Spectral,
          
aspect='auto', origin='lower')
 
#原始数据
 
plt.scatter(X['filmname1'], X['filmname2'], marker='o',
       
facecolors='yellow', edgecolors='red', s=30, alpha=0.5)
 
# 显示质心
 
centroids = kmeans.cluster_centers_
 
plt.scatter(centroids[:,0], centroids[:,1], marker='o', s=200, linewidths=3,
       
color='k', zorder=10, facecolors='black',edgecolors='white',alpha=0.9)
 
plt.title(u'聚类分析结果(K-Means')
 
plt.xlim(x_min, x_max)
 
plt.ylim(y_min, y_max)
 
plt.xticks(())
 
plt.yticks(())
 
plt.show()
  • 步骤四:分类结果如图所示。