数据挖掘-Apriori算法(1)

来源:互联网 发布:药流对身体的影响 知乎 编辑:程序博客网 时间:2024/05/02 02:25

(此为第一部分,先保存至线上。。。。)

apriori算法为数据挖掘与机器学习的基础算法之一,它能有效挖掘出关联规则,并求出各维频繁项集。

此算法现在只求出一维频繁项集,之后继续实现

#include<iostream>#include<stdlib.h>#include<math.h>#include<vector>#include<stdio.h>#include<string.h>#include<string>using namespace std;//用同一种结构体去表示之后的每一个频繁项集typedef struct Item{string data;int frequency;};void apriori(vector<string> &S,Item a[]) {    //S为初始数据集实例,block为例举(不重复)出来的每个数据项int size = S.size();for (int i = 0; i < size; i++) {              //通过一次遍历初始数据集,来获得一维频繁项集的候选项集int len = S[i].length();int j = 0;vector<int> ans;ans.push_back(-1);while (j < len) {                 //获得一行中每一个有用数据的位置信息if (S[i][j] == ' ')ans.push_back(j);j++;}ans.push_back(j);int ans_len = ans.size();for (int index = 0; index < ans_len-1; index++) {string str = S[i].substr(ans[index]+1, ans[index + 1]-ans[index]-1);             //获取每一个有用数据int k = 0;    loop:if(str.compare(a[k].data)==0)    a[k].frequency++;else {k++;goto loop;}                }}}int main() {struct Item a[5] = {{"Bread",0},{"Cream",0},{"Beer",0},{"Milk",0},{"Tea",0}};vector<string> S;S.push_back("Bread Cream Beer");S.push_back("Cream Beer");S.push_back("Bread Cream");S.push_back("Bread Cream Beer");S.push_back("Tea Cream");S.push_back("Bread Cream Beer Tea");S.push_back("Beer Tea");S.push_back("Bread Cream");apriori(S, a);cout << "一维频繁项集候选项集为:" << endl;for (int i = 0; i < 5; i++) {cout << a[i].data << " " << a[i].frequency << endl;}}