登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 理工学类 > 自动化 > 正文

大数据挖掘中的聚类分析毕业论文

 2021-07-12 11:07  

摘 要

本文介绍了当代背景下大数据挖据的意义以及几种挖掘方法的概念和实现方式,包括kmean算法、 DBScan算法等,以及借助c 等软件利用kmean算法实例构建模型。

关键词:大数据挖掘;聚类分析;K-means;C

Abstract

This paper introduces the concept and implementation as well as several mining significance of contemporary background big data mining data, including kmean algorithm, DBScan algorithm, as well as by means of c software use kmean algorithm example to build the model.

Key Words: Big Data Mining ;clustering analysis; K-means;C

第1章 绪论

1.1聚类的意义

物以类聚,人以群分。对事物进行分类,是人们认识事物的出发点,也是人们认识世界的一种重要方法,因此,分类学已成为人们认识世界的一门基础科学。
1.2 聚类分析的应用范围

在生物、经济、社会、人口等领域的研究中,存在着大量量化分类研究。尤其是现在互联网时代,各大搜索引擎譬如google提供巨量信息,若能将此庞杂的数据加以分类,可以从中得到大量的信息。
1.3 实际例子

在经济研究中,为了研究不同地区城镇居民生活中的收入和消费情况,往往需要划分不同的类型去研究。

在地质学中,为了研究矿物勘探,需要根据各种矿石的化学和物理性质和所含化学成分把它们归于不同种类。
在人口学研究中,需要构造人口生育分类模式、人口死亡分类状况,以此来研究人口的生育和死亡规律。

在互联网领域,可以根据某一特定时间段广大用户在搜索引擎上的留下关注热点可以预计一些无法用科学理论解释却一定合理的事情,比如google曾经根据用户大量搜索的机票信息成功预测一场大规模流感,


 

第2章 聚类分析的几种方法

2.1 k一means

2.1.1k-means概念

K-Means方法是MacQueen1967年提出的。给定一个数据集合X和一个整数K,K-Means方法是将X分成K个聚类并使得在每个聚类中所有值与该聚类中心距离的总和最小。

2.1.2 k一means算法基本步骤

(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;

(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;

(3) 重新计算每个(有变化)聚类的均值(中心对象);

(4) 计算标准测度函数,当满足一定条件,如函数收敛时,则算法终止;如果条件不满足则回到步骤。

2.2 STING算法

2.2.1 STING算法概念

 STING是一个基于网格的多分辨率聚类技术,它将空间区域划分为矩形单元。针对不同级别的分辨率,通常存在多个级别的矩形单元,这些单元形成了一个层次结构:高层的每个单元被划分为多个低一层的单元。关于每个网格单元属性的统计信息(例如平均值,最大值,和最小值)被预先计算和存储。这些统计变量可以方便下面描述的查询处理使用。 高层单元的统计变量可以很容易地从低层单元的变量计算得到。这些统计变量包括:属性无关的变量 count;属性相关的变量 m(平均值),s(标准偏差),min(最小值),max(最大值),以及该单元中属性值遵循的分布类型 distribution,例如正态的,均衡的,指数的,或无(如果分布未知)。当数据被装载进数据库,最底层单元的变量 count,m,s,min,和 max 直接进行计算。如果分布的类型事先知道,distribution 的值可以由用户指定,也可以通过假设检验来获得。一个高层单元的分布类型可以基于它对应的低层单元多数的分布类型,用一个阈值过滤过程来计算。如果低层单元的分布彼此不同,阈值检验失败,高层单元的分布类型被置为 none。

统计变量的使用可以以自顶向下的基于网格的方法。首先,在层次结构中选定一层作为查询处理的开始点。通常,该层包含少量的单元。对当前层次的每个单元,计算置信度区间(或者估算其概率),用以反映该单元与给定查询的关联程度。不相关的单元就不再考虑。低一层的处理就只检查剩余的相关单元。这个处理过程反复进行,直到达到最底层。此时,如果查询要求被满足,那么返回相关单元的区域。否则,检索和进一步的处理落在相关单元中的数据,直到它们满足查询要求。

2.2.2 STING算法步骤

我们需要对用户名排序,且只输出不同的姓名。那么在shell 编程中,可以这样用:

[cpp] view plain copy

  1. awk '{print $1}' name.txt | sort | uniq  

  

当然,有了STL,这些处理会得到很大的简化。我们可以使用 fstream来代替麻烦的fopen fread fclose, 用vector来代替数组。最重要的是用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重。听起来好像很不错。看看下面代码(例程1):

[cpp] view plain copy

  1. #include lt;stringgt;  
  2. #include lt;iostreamgt;  
  3. #include lt;algorithmgt;  
  4. #include lt;vectorgt;  
  5. #include lt;fstreamgt;  
  6. using namespace std;  
  7. int main()  
  8. {  
  9.  ifstream in("name.txt");  
  10.  string strtmp;  
  11.  vectorlt;stringgt; vect;  
  12.  while(getline(in, strtmp, '/n'))  
  13.  vect.push_back(strtmp.substr(0, strtmp.find(' ')));  
  14.  sort(vect.begin(), vect.end());  
  15.  vectorlt;stringgt;::iterator it=unique(vect.begin(), vect.end());  
  16.  copy(vect.begin(), it, ostream_iteratorlt;stringgt;(cout, "/n"));  
  17.  return 0;  
  18. }  
  19.    

当然,在这个文本格式中,不用vector而使用map会更有扩充性,例如,还可通过人名找电话号码等等,但是使用了map就不那么好用sort了。

这里string的作用不只是可以存储字符串,还可以提供字符串的比较,查找等。在sort和unique函数中就默认使用了less 和equal_to函数, 上面的一段代码,其实使用了string的以下功能:
存储功能,在getline() 函数中查找功能,在find() 函数中子串功能,substr() 函数中string operator lt; , 默认在sort() 函数中调用string operator == , 默认在unique() 函数中调用

总之,有了string 后,C 的字符文本处理功能总算得到了一定补充,加上配合STL其他容器使用,其在文本处理上的功能已经与perl, shell, php的距离缩小很多了。 因此掌握string 会让你的工作事半功倍。

1 string 使用 其实,string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 你在string 头文件中你会发现下面的代码:

[cpp] view plain copy

  1. extern "C " {  
  2. typedef basic_string lt;chargt; string;  
  3. typedef basic_string lt;wchar_tgt; wstring;  
  4. } // extern "C "  

  

string 其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等。详细函数列表参看附录。不要害怕这么多函数,其实有许多是序列容器带有的,平时不一定用的上。

如果你要想了解所有函数的详细用法,你需要查看basic_string,或者下载STL编程手册。这里通过实例介绍一些常用函数。

1.1 充分使用string 操作符

string 重载了许多操作符,包括 , =, lt;, =, , [], lt;lt;, gt;gt;等,正式这些操作符,对字符串操作非常方便。先看看下面这个例子:

[cpp] view plain copy

  1. #include lt;stringgt;  
  2. #include lt;iostreamgt;  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.  string strinfo="Please input your name:";  
  7.  cout lt;lt; strinfo ;  
  8.  cin gt;gt; strinfo;  
  9.  if( strinfo == "winter" )  
  10.   cout lt;lt; "you are winter!"lt;lt;endl;  
  11.  else if( strinfo != "wende" )  
  12.   cout lt;lt; "you are not wende!"lt;lt;endl;  
  13.  else if( strinfo lt; "winter")  
  14.   cout lt;lt; "your name should be ahead of winter"lt;lt;endl;  
  15.  else  
  16.   cout lt;lt; "your name should be after of winter"lt;lt;endl;  
  17.  strinfo  = " , Welcome to China!";  
  18.  cout lt;lt; strinfolt;lt;endl;  
  19.  cout lt;lt;"Your name is :"lt;lt;endl;  
  20.  string strtmp = "How are you? "   strinfo;  
  21.  for(int i = 0 ; i lt; strtmp.size(); i  )  
  22.   coutlt;lt;strtmp[i];  
  23.  return 0;  
  24. }  

  

下面是程序的输出

Please input your name:Hero
you are not wende!
Hero , Welcome to China!
How are you? Hero , Welcome to China!

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图