‘壹’ 大数据算法 的原理是什么 是谁发明的 是怎么发明的
大数据是一个很广的概念
并没有大数据算法这种东西
大数据是指数据量激增以后面临的一系列难题和场景
具体到实际应用 那就要具体看了
你可能想问 原来一个算法 在大数据场景下 变成什么样了, 其实这是分布式算法的问题,很多时候都不是某个人发明 而是工程问题
‘贰’ 需要掌握哪些大数据算法
数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART。
1、C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法。
2、2、k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。
3、支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种监督式学习的方法,它广泛的应用于统计分类以及回归分析中。
4、Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。
5、最大期望(EM)算法。在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然 估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。
6、PageRank是Google算法的重要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里·佩奇(Larry Page)。因此,PageRank里的page不是指网页,而是指佩奇,即这个等级方法是以佩奇来命名的。
7、Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器 (强分类器)。
8、K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
9、Naive Bayes。在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。
10、CART, Classification and Regression Trees。 在分类树下面有两个关键的思想。
关于大数据算法的相关问题推荐CDA数据分析师的相关课程,课程内容兼顾培养解决数据挖掘流程问题的横向能力以及解决数据挖掘算法问题的纵向能力。要求学生具备从数据治理根源出发的思维,通过数字化工作方法来探查业务问题,通过近因分析、宏观根因分析等手段,再选择业务流程优化工具还是算法工具,而非“遇到问题调算法包”点击预约免费试听课。
‘叁’ 大数据十大经典算法之k-means
大数据十大经典算法之k-means
k均值算法基本思想:
K均值算法是基于质心的技术。它以K为输入参数,把n个对象集合分为k个簇,使得簇内的相似度高,簇间的相似度低。
处理流程:
1、为每个聚类确定一个初始聚类中心,这样就有k个初始聚类中心;
2、将样本按照最小距离原则分配到最邻近聚类
3、使用每个聚类中的样本均值作为新的聚类中心
4、重复步骤2直到聚类中心不再变化
5、结束,得到K个聚类
划分聚类方法对数据集进行聚类时的要点:
1、选定某种距离作为数据样本间的相似性度量,通常选择欧氏距离。
2、选择平价聚类性能的准则函数
用误差平方和准则函数来评价聚类性能。
3、相似度的计算分局一个簇中对象的平均值来进行
K均值算法的优点:
如果变量很大,K均值比层次聚类的计算速度较快(如果K很小);
与层次聚类相比,K均值可以得到更紧密的簇,尤其是对于球状簇;
对于大数据集,是可伸缩和高效率的;
算法尝试找出使平方误差函数值最小的k个划分。当结果簇是密集的,而簇与簇之间区别明显的时候,效果较好。
K均值算法缺点:
最后结果受初始值的影响。解决办法是多次尝试取不同的初始值。
可能发生距离簇中心m最近的样本集为空的情况,因此m得不到更新。这是一个必须处理的问题,但我们忽略该问题。
不适合发现非凸面形状的簇,并对噪声和离群点数据较敏感,因为少量的这类数据能够对均值产生较大的影响。
K均值算法的改进:
样本预处理。计算样本对象量量之间的距离,筛掉与其他所有样本那的距离和最大的m个对象。
初始聚类中心的选择。选用簇中位置最靠近中心的对象,这样可以避免孤立点的影响。
K均值算法的变种:
K众数(k-modes)算法,针对分类属性的度量和更新质心的问题而改进。
EM(期望最大化)算法
k-prototype算法
这种算法不适合处理离散型属性,但是对于连续型具有较好的聚类效果。
k均值算法用途:
图像分割;
衡量足球队的水平;
下面给出代码:
#include <iostream>
#include <vector>
//auther archersc
//JLU
namespace CS_LIB
{
using namespace std;
class Kmean
{
public:
//输入格式
//数据数量N 维度D
//以下N行,每行D个数据
istream& loadData(istream& in);
//输出格式
//聚类的数量CN
//中心维度CD
//CN行,每行CD个数据
//数据数量DN
//数据维度DD
//以下DN组,每组的第一行两个数值DB, DDis
//第二行DD个数值
//DB表示改数据属于一类,DDis表示距离改类的中心的距离
ostream& saveData(ostream& out);
//设置中心的数量
void setCenterCount(const size_t count);
size_t getCenterCount() const;
//times最大迭代次数, maxE ,E(t)表示第t次迭代后的平方误差和,当|E(t+1) - E(t)| < maxE时终止
void clustering(size_t times, double maxE);
private:
double calDistance(vector<double>& v1, vector<double>& v2);
private:
vector< vector<double> > m_Data;
vector< vector<double> > m_Center;
vector<double> m_Distance;
vector<size_t> m_DataBelong;
vector<size_t> m_DataBelongCount;
};
}
#include "kmean.h"
#include <ctime>
#include <cmath>
#include <cstdlib>
//auther archersc
//JLU
namespace CS_LIB
{
template<class T>
void swap(T& a, T& b)
{
T c = a;
a = b;
b = c;
}
istream& Kmean::loadData(istream& in)
{
if (!in){
cout << "input error" << endl;
return in;
}
size_t dCount, dDim;
in >> dCount >> dDim;
m_Data.resize(dCount);
m_DataBelong.resize(dCount);
m_Distance.resize(dCount);
for (size_t i = 0; i < dCount; ++i){
m_Data[i].resize(dDim);
for (size_t j = 0; j < dDim; ++j){
in >> m_Data[i][j];
}
}
return in;
}
ostream& Kmean::saveData(ostream& out)
{
if (!out){
cout << "output error" << endl;
return out;
}
out << m_Center.size();
if (m_Center.size() > 0)
out << << m_Center[0].size();
else
out << << 0;
out << endl << endl;
for (size_t i = 0; i < m_Center.size(); ++i){
for (size_t j = 0; j < m_Center[i].size(); ++j){
out << m_Center[i][j] << ;
}
out << endl;
}
out << endl;
out << m_Data.size();
if (m_Data.size() > 0)
out << << m_Data[0].size();
else
out << << 0;
out << endl << endl;
for (size_t i = 0; i < m_Data.size(); ++i){
out << m_DataBelong[i] << << m_Distance[i] << endl;
for (size_t j = 0; j < m_Data[i].size(); ++j){
out << m_Data[i][j] << ;
}
out << endl << endl;
}
return out;
}
void Kmean::setCenterCount(const size_t count)
{
m_Center.resize(count);
m_DataBelongCount.resize(count);
}
size_t Kmean::getCenterCount() const
{
return m_Center.size();
}
void Kmean::clustering(size_t times, double maxE)
{
srand((unsigned int)time(NULL));
//随机从m_Data中选取m_Center.size()个不同的样本点作为初始中心。
size_t *pos = new size_t[m_Data.size()];
size_t i, j, t;
for (i = 0; i < m_Data.size(); ++i){
pos[i] = i;
}
for (i = 0; i < (m_Data.size() << 1); ++i){
size_t s1 = rand() % m_Data.size();
size_t s2 = rand() % m_Data.size();
swap(pos[s1], pos[s2]);
}
for (i = 0; i < m_Center.size(); ++i){
m_Center[i].resize(m_Data[pos[i]].size());
for (j = 0; j < m_Data[pos[i]].size(); ++j){
m_Center[i][j] = m_Data[pos[i]][j];
}
}
delete []pos;
double currE, lastE;
for (t = 0; t < times; ++t){
for (i = 0; i < m_Distance.size(); ++i)
m_Distance[i] = LONG_MAX;
for (i = 0; i < m_DataBelongCount.size(); ++i)
m_DataBelongCount[i] = 0;
currE = 0.0;
for (i = 0; i < m_Data.size(); ++i){
for (j = 0; j < m_Center.size(); ++j){
double dis = calDistance(m_Data[i], m_Center[j]);
if (dis < m_Distance[i]){
m_Distance[i] = dis;
m_DataBelong[i] = j;
}
}
currE += m_Distance[i];
m_DataBelongCount[m_DataBelong[i]]++;
}
cout << currE << endl;
if (t == 0 || fabs(currE - lastE) > maxE)
lastE = currE;
else
break;
for (i = 0; i < m_Center.size(); ++i){
for (j = 0; j < m_Center[i].size(); ++j)
m_Center[i][j] = 0.0;
}
for (i = 0; i < m_DataBelong.size(); ++i){
for (j = 0; j < m_Data[i].size(); ++j){
m_Center[m_DataBelong[i]][j] += m_Data[i][j] / m_DataBelongCount[m_DataBelong[i]];
}
}
}
}
double Kmean::calDistance(vector<double>& v1, vector<double>& v2)
{
double result = 0.0;
for (size_t i = 0; i < v1.size(); ++i){
result += (v1[i] - v2[i]) * (v1[i] - v2[i]);
}
return pow(result, 1.0 / v1.size());
//return sqrt(result);
}
}
#include <iostream>
#include <fstream>
#include "kmean.h"
using namespace std;
using namespace CS_LIB;
int main()
{
ifstream in("in.txt");
ofstream out("out.txt");
Kmean kmean;
kmean.loadData(in);
kmean.setCenterCount(4);
kmean.clustering(1000, 0.000001);
kmean.saveData(out);
return 0;
}
‘肆’ 算法和大数据算法哪个好
计算机科学在大数据出现之前,非常依赖模型以及算法。人们如果想要得到精准的结论,需要建立模型来描述问题,同时,需要理顺逻辑,理解因果,设计精妙的算法来得出接近现实的结论。因此,一个问题,能否得到最好的解决,取决于建模是否合理,各种算法的比拼成为决定成败的关键。然而,大数据的出现彻底改变了人们对于建模和算法的依赖。举例来说,假设解决某一问题有算法A 和算法B。在小量数据中运行时,算法A的结果明显优于算法B。
‘伍’ 大数据算法有哪些
大数据是一个很广的概念,并没有大数据算法这种东西,您估计想问的是大数据挖掘的算法:
1.朴素贝叶斯
超级简单,就像做一些数数的工作。如果条件独立假设成立的话,NB将比鉴别模型收敛的更快,所以你只需要少量的训练数据。即使条件独立假设不成立,NB在实际中仍然表现出惊人的好。
2. 回归
LR有很多方法来对模型正则化。比起NB的条件独立性假设,LR不需要考虑样本是否是相关的。与决策树与支持向量机不同,NB有很好的概率解释,且很容易利用新的训练数据来更新模型(使用在线梯度下降法)。
3.决策树
DT容易理解与解释。DT是非参数的,所以你不需要担心野点和数据是否线性可分的问题,此外,RF在很多分类问题中经常表现得最好,且速度快可扩展,也不像SVM那样需要调整大量的参数,所以最近RF是一个非常流行的算法。
4.支持向量机
很高的分类正确率,对过拟合有很好的理论保证,选取合适的核函数,面对特征线性不可分的问题也可以表现得很好。SVM在维数通常很高的文本分类中非常的流行。
想要了解更多有关数据挖掘的信息,可以了解一下CDA数据分析师的课程。大数据分析师现在有专业的国际认证证书了, “CDA 数据分析师”具体指在互联网、金融、零售、咨询、电信、医疗、旅游等行业专门从事数据的采集、清洗、处理、分析并能制作业务报告、 提供决策的新型数据分析人才。全球 CDA 持证者秉承着先进商业数据分析的新理念,遵循着《CDA 数据分析师职业道德和行为准则》新规范,发 挥着自身数据科学专业能力,推动科技创新进步,助力经济持续发展。点击预约免费试听课。
‘陆’ 在大数据量时,K-means算法和层次聚类算法谁更有优势
这个问题其实是无解的,数据不同,算法的分类效果、实际运行时间也是不同。
若单从运算速度而言,k-means比层次更快。
原因是K-means是找中心,然后计算距离;层次是逐个样本逐层合并,层次的算法复杂度更高。
更重要的是,在大数量下,K-means算法和层次聚类算法的分类效果真的只能用见仁见智来形容了。
‘柒’ 大数据的新算法:简化数据分类
大数据的新算法:简化数据分类
如今,大数据时代悄然来临。专家用“大数据”的表达描述大量信息,比如数十亿人在计算机、智能手机以及其他电子设备上分享的照片、音频、文本等数据。当前这种模式为我们的未来展现了前所未有的愿景:比如追踪流感疫情蔓延,实时监控道路交通,处理紧急自然灾害等。对人们而言,想要利用这些庞大的数据,首先必须要了解它们,而在此之前我们需要一种快捷有效自动的方式对数据进行分类。
其中一种最为常用的系统,是一系列称之为簇分析的统计技术,这种技术能依据数据的“相似性”进行数据分组。来自意大利国际高等研究院(SISSA)的两位研究者基于简单且强大的原理设计了一种簇分析方法,被证明可以非常有效地解决一些大数据分析中遇到的主要典型问题。
数据集合可以视为多维空间的云数据点。这些点呈现不同分配方式:或稀疏地分布在一个区域,或密集地分布在另外一个区域。簇分析就是用来有效地鉴别密集型区域,基于基本的准则将数据分为一定数量的重要子集合,每个子集合对应一种分类。
“以一个面部图像数据库为例,”SISSA统计与生物物理系教授Alessandro Laio说,“数据库可能包含同一个人的多张照片,簇分析可以用来归类同一人的所有照片。这种类型的分析可用自动脸部识别系统来完成。”
“我们试着设计一种较现有方法更为有效的算法,来解决簇分析中典型的问题。”Laio继续补充说。
“我们的方法基于一种新的鉴定簇中心,比如子集合,”另一位研究者Alex Rodriguez解释道,“试想这样的情形,在无法访问地图中,却不得不鉴定全球所有的城市时,这无疑是一个艰巨的任务。”Rodriguez进一步解释道,“因此我们在做一种探索式的识别,尝试寻找一条简单的规则或是一种捷径来达成目标。”
“为了确定一个地方是否达到城市级别规模,我们可以让当地居民计数自己的‘邻居’,换句话说,他房子的100米内住了多少人。一旦得到这个数字,我们继续去确认每一个居民,他们身边最近的拥有最多邻居数的居民。借助这两组数据结果交叉的部分,就可以推断每个人所在居住区域人口的稠密程度,以及拥有邻居数最多的两家间距。就全球人口而言,通过自动交叉检测这些数据,我们能识别代表簇状中心的个体,这些个体就是不同的城市。” Laio解释道。
“我们的算法能够精确地完成此类计算,也适用于其他场景,”Rodriguez进一步补充说,此算法表现相当优异。Rodriguez对此有着深刻理解:“借用面部数据档案Olivetti Face数据库,我们测试了自己的数学模型,并获得了满意的结果。此系统能够正确地识别大部分个体,从不产生假阳性结果,这意味着在某些情况下,它可能无法识别事物,但绝不会混淆一个个体与另一个个体。与类似的方法相比,我们的算法能够有效地剔除异类,要知道这些异类的数据点与其他数据存在较大差异是会损毁分析结果的。”
以上是小编为大家分享的关于大数据的新算法:简化数据分类的相关内容,更多信息可以关注环球青藤分享更多干货
‘捌’ 大数据常用算法有哪些
made it," sai
‘玖’ 求一种大数据分析的算法
//群体数据的排序与查找 //1.直接插入排序的算法实现: void InsertSort(int arrForSort[],int nLength) { int i,j,temp; for(i=1;i/遍历整个序列 { temp=arrForSort[i]; for(j=i;j>0&&temp<arrForSort[j-1];j--) //将第i个元素插入到合适的位置 arrForSort[j]=arrForSort[j-1]; arrForSort[j]=temp; } } //2.直接选择排序的算法实现: void SelectSort(int arrForSort[],int nLength) { int min,temp, i,j; for(i=0;i<nLength-1;i++) { min=i; for(j=i+1;j<nLength;j++) //选出具有最小值的元素的下标标号 if(arrForSort[j]/第i个元素与具有最小值的元素进行交换 arrForSort[i]=arrForSort[min]; arrForSort[min]=temp; } } //3.起泡法排序的算法实现: void BubbleSort(int arrForSort[],int nLength) { int i,j,temp; i=nLength-1; while(i>0) { for(j=0;j<i;j++) //1次起泡的过程 { if(arrForSort[j+1]/逆序交换 {temp=arrForSort[j+1]; arrForSort[j+1]=arrForSort[j]; arrForSort[j]=temp;} } i--; //准备下一次起泡序列的长度 } } //4.希尔排序的算法实现: void ShellSort(int arrForSort[],int nLength) { int k,j,i,temp; k=nLength/2; //设置初始子序列的间隔 while(k>0) { for(j=k;j/子序列的插入排序 { temp=arrForSort[j];i=j-k; while((i>=0)&&(arrForSort[i]>temp)) { arrForSort[i+k]=arrForSort[i];i=i-k; } arrForSort[i+k]=temp; } k=k/2; //重新设置子序列的间隔 } return; } //5.顺序查找的实现 int SequenceSearch(int arrForSearch[],int nLength,int nKey) { int i; for(i=0;i<nLength;i++) //遍历整个序列 if(arrForSearch[i]==nKey) return i; return -1; } //6.折半查找的算法实现 int MiddleSearch(int arrForSearch(int arrForSearch[],int nLength,int nKey) { int mid,top,bottom; bottom=0; //设置首末元素下标 top=nLength-1; while(bottom/取序列中间元素下标 if(arrForSearch[mid]==nKey) return mid; //如果找到该元素,返回其下标 else if(arrForSearch[mid]>nKey) top=mid-1; //在前半个序列中继续查找 else bottom=mid+1; } return -1; }