FM算法组合估计
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h> #define NUM (int)pow(2.0,25)+1 int length=;//计算长度
int data[];//存放数据流 struct node
{
int data;
struct node* next;
};
struct node* creat()//创建链表
{
int x;
struct node *tail,*p,*head;
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
tail=head;
//FILE *fp=fopen("./stream_for_fm.txt","r");
FILE *fp=fopen("./stream_sample_fm.txt","r");//样本
if(fp==NULL)
{
printf("file open failed!\n");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%d",&x);
p=(struct node *)malloc(sizeof(struct node));
p->data=x;
tail->next=p;
p->next=NULL;
tail=p;
data[length++]=x;
}
printf("链表创建成功!\n");
return head;
}
/*排序链表*/
struct node *sort(struct node *head)
{
struct node *p,*q;
for(p=head->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data > q->data)
{
int tmp=p->data;
p->data=q->data;
q->data=tmp;
}
}
}
printf("链表排序完成!\n");
return head;
} /*计算有多少不同元素*/
int different_node_count(struct node *head)
{
struct node *p,*q,*tmp;
int count_equal=,count_total=;
tmp=NULL; for(p=head->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data == q->data)
{
count_equal++;//相同元素加
tmp=q;//记录最后一个相同的元素位置
}
else
{
break;
}
}
if(tmp!=NULL)
{
p=tmp;
tmp=NULL;
}
//count_total++;//统计全部节点的个数
}
printf("不同节点的个数%d\n节点总数:%d\n",length-count_equal,length);
return length-count_equal;
}
//计算尾数
int get_tailnum(long long a)
{
int i=,count =;
while(a!=)
{
if( == a%)
{
count++;
}
else
{
break;
}
a=a/;
i++;
}
return count;
} int main()
{
struct node *head;
int only_value;
int M=,L=;
int i,j,k,x;
int circle=;
long long h,a,b;
int R[][];//尾数
int max_tailnum=,tmp;//最大尾长
double ave_tail[]={};//最大尾数的平均数
int mid_tail;//平均尾数的中位数
int estimate[];//存入估计值
double error;//误差
long long sum=; head=creat();
head=sort(head);
only_value=different_node_count(head);
srand(time());
for(x=;x<circle;x++)
{
for(i=;i<M;i++)//分组M
{
for(j=;j<L;j++)//每组L个hash
{
a=rand()%NUM;
b=rand()%NUM;
max_tailnum=;
for(k=;k<length;k++)
{
tmp=get_tailnum(a*data[k]+b);
if(max_tailnum<tmp)
{
max_tailnum=tmp;
}
}
R[i][j]=max_tailnum;
}
for(j=;j<L;j++)
{
ave_tail[i]+=R[i][j];
}
ave_tail[i]/=L;//每组的平均值
} if(M%==)
{
mid_tail=(ave_tail[M/]+ave_tail[M/+])/;
}
else
{
mid_tail=ave_tail[M/];
} estimate[x]=(int)pow(2.0,mid_tail); //ave_tail尾长的平均值清零
for(int i= ;i < ;i ++)
{
ave_tail[i]=;
}
}
int temp=;
printf("估计元素个数");
for(i=;i<circle;i++)
{
temp+=estimate[i];
//printf("%8d",estimate[i]);
sum+=(estimate[i]-only_value)*(estimate[i]-only_value);
}
printf("%lf",temp/(double)circle);
putchar('\n');
error=sqrt(sum/(double)only_value);
printf("误差(方差):%lf\n",error);
system("pause");
return ;
}
FM算法组合估计的更多相关文章
- FM算法(一):算法理论
主要内容: 动机 FM算法模型 FM算法VS 其他算法 一.动机 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合:非线性SVM可 ...
- FM算法
1.FM背景 在计算广告中,CTR预估(click-through rate)是非常重要的一个环节,因为DSP后面的出价要依赖于CTR预估的结果.在前面的相关博文中,我们已经提到了CTR中相关特征工程 ...
- FM算法解析及Python实现
1. 什么是FM? FM即Factor Machine,因子分解机. 2. 为什么需要FM? 1.特征组合是许多机器学习建模过程中遇到的问题,如果对特征直接建模,很有可能会忽略掉特征与特征之间的关联信 ...
- FM算法 的总结
FM的总结: 1.FM算法与线性回归相比增加了特征的交叉.自动选择了所有特征的两两组合,并且给出了两两组合的权重. 2.上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了.比如我 ...
- FM算法及FFM算法
转自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html http://blog.csdn. ...
- 个性化排序算法实践(一)——FM算法
因子分解机(Factorization Machine,简称FM)算法用于解决大规模稀疏数据下的特征组合问题.FM可以看做带特征交叉的LR. 理论部分可参考FM系列,通过将FM的二次项化简,其复杂度可 ...
- 推荐算法之---FM算法;
一,FM算法: 1,逻辑回归上面进行了交叉特征.算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n). 2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的 ...
- FM算法(二):工程实现
主要内容: 实现方法 Python实现FM算法 libFM 一.实现方法 1.FM模型函数 变换为线性复杂度的计算公式: 2.FM优化目标 根据不同的应用,FM可以采用不同的损失函数loss fu ...
- (转载)FM 算法
(转载)FM算法 https://zhuanlan.zhihu.com/p/33184179
随机推荐
- Android_开发片段(Part 1)
1.maven环境配置时也跟java类似,进行我的电脑环境的设置,cmd查询:mvn -version 2.在新建AVD时,要注意AVD的版本(API),版本太低或者太高,经常不能运行项目或者在运行项 ...
- appium 链接真机
1. 安装驱动 说明:如果驱动装不上,可以使用第三方的工具去安装.(一般来说还是用第三方) 这里推荐锤子科技的HandShaker, 地址:http://www.smartisan.com/apps/ ...
- 购买一台阿里云云主机(CentOS)后
系统的优化优化之前,首先查看版本信息 cat /etc/redhat-release CentOS release 6.9 (Final) 查看内核版本 uname -a Linux iZwz98ak ...
- selenium 3 下载 + Java使用
一.下载Selenium 3 的相关包和工具 Selenium 3 下载的官网地址为http://www.seleniumhq.org/download/.当然,需要翻墙才能登陆selenium的官网 ...
- 前端学习笔记——CSS选择器
学习css选择器之前我们先了解下css规则: CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器通常是需要改变样式的 HTML 元素. 每条声明由一个属性和一个值组成. 1.id选 ...
- activiti7从act_ge_bytearray表中查询资源文件并保存到桌面文件夹中
package com.zcc.activiti02; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proc ...
- cmd 运行 java 文件
在安装好jdk 并配置好环境变量的情况下 原因一:没有指定class文件的路径 例如HI是变异好的class文件,并且在d:/RJAZB里面 如果写成 Java HI 则会报错 正确做法 java ...
- bootstrapTble 的一些小结
前言: 1.bootstrapTable 官网 http://bootstrap-table.wenzhixin.net.cn/zh-cn/ ,http://bootstrap-table.wenz ...
- zabbix主动模式设置
zabbix客户端发数据给服务端分为主被动两种模式,主动模式是zabbix客户端主动向服务端发送数据,被动模式是被动等待服务端来取数据. 主动模式: 客户端每隔一段时间主动向服务端发起连接请求--&g ...
- 导出CSV格式
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype. ...