相關數據挖掘算法的調用

 分類算法: 

     1.調用C4.5

        分類算法我們會額外計算它的分類準確率,實現代碼如下,有註釋了,分類算法的實現很多共通之處,往後的幾個 分類算法就不指明瞭:


        必須提醒的是,設置分類屬性所在行號是必須的。

  1. import weka.classifiers.*;  
  2. import weka.core.Instances;  
  3. import weka.core.converters.*;  
  4. import weka.classifiers.trees.J48;                                         // C45算法(1)  
  5. import java.io.File;  
  6. import java.io.IOException;  
  7.   
  8. import javax.swing.*;  
  9.   
  10. public class callC45   
  11. {  
  12.     public callC45()  
  13.     {}  
  14.       
  15.     public void Main() throws Exception  
  16.     {  
  17.         J48 m_classifier = new J48();  
  18.           
  19.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff");   //訓練語料文件  
  20.         ArffLoader atf = new ArffLoader();  
  21.         atf.setFile(inputFile);  
  22.         Instances instancesTrain = atf.getDataSet();             //讀入訓練文件  
  23.           
  24.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff"); // 測試語料文件  
  25.         atf.setFile(inputFile);  
  26.         Instances instancesTest = atf.getDataSet();    //讀入訓練文件  
  27.         instancesTest.setClassIndex(0);                                                                              //設置分類屬性所在行號(第一行爲0號),instancesTest.numAttributes()可以取得屬性總數  
  28.           
  29.         double sum = instancesTest.numInstances(),right=0.0f;           //測試語料實例數  
  30.         instancesTrain.setClassIndex(0);  
  31.           
  32.         m_classifier.buildClassifier(instancesTrain);  
  33.         System.out.println(m_classifier.toString());  
  34.         System.out.println("");  
  35.         for(int i = 0; i < sum ; i++)  
  36.         {  
  37.             if(m_classifier.classifyInstance(instancesTest.instance(i))==instancesTest.instance(i).classValue())  //如果預測值和答案值相等(測試語料中的分類列提供的須爲正確答案,結果纔有意義)  
  38.             {  
  39.                 right++;  
  40.             }  
  41.         }  
  42.         System.out.println("J48 classification precision:"+(right/sum));  
  43.     }  
  44.       
  45. //  public static void main(String[] args) throws Exception  
  46. //  {  
  47. //      callC45 a = new callC45();  
  48. //      a.Main();  
  49. //  }  
  50.       
  51. }  

         2.調用AdaBoost算法

          

  1. import weka.classifiers.meta.AdaBoostM1;  
  2. import weka.classifiers.*;  
  3. import weka.core.converters.*;  
  4. import weka.core.Instances;  
  5. import java.io.*;  
  6.   
  7. public class callAdaBoostM1   
  8. {  
  9.     public callAdaBoostM1()  
  10.     {  
  11.           
  12.     }  
  13.       
  14.     public void Main() throws Exception  
  15.     {  
  16.         AdaBoostM1 m_classifier = new AdaBoostM1();  
  17.           
  18.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff");  
  19.         ArffLoader arf = new ArffLoader();  
  20.         arf.setFile(inputFile);  
  21.         Instances instancesTrain = arf.getDataSet();  
  22.           
  23.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff");  
  24.         arf.setFile(inputFile);  
  25.         Instances instancesTest = arf.getDataSet();  
  26.         instancesTest.setClassIndex(0);  
  27.           
  28.         double sum = instancesTest.numInstances(),right=0.0f;  
  29.         instancesTrain.setClassIndex(0);  
  30.           
  31.         m_classifier.buildClassifier(instancesTrain);  
  32.         System.out.println(m_classifier.toString());  
  33.         System.out.println("");  
  34.           
  35.         for(int i = 0; i<sum ; i++)  
  36.         {  
  37.             if(m_classifier.classifyInstance(instancesTest.instance(i)) == instancesTest.instance(i).classValue())  
  38.             {  
  39.                 right++;  
  40.             }  
  41.         }  
  42.         System.out.println("AdaBoostM1 classification precision:"+(right/sum));  
  43.           
  44.     }  
  45.       
  46.     public static void main(String[] args) throws Exception  
  47.     {  
  48.         callAdaBoostM1 a = new callAdaBoostM1();  
  49.         a.Main();  
  50.     }  
  51. }  

            3.調用樸素bayes算法;

  1. import java.io.*;  
  2. import weka.classifiers.*;  
  3. import weka.classifiers.bayes.*;  
  4. import weka.core.Instances;  
  5. import weka.core.converters.*;  
  6. import java.io.File;  
  7. import java.io.IOException;  
  8.   
  9. public class callbayes  
  10. {  
  11.     public callbayes()  
  12.     {}  
  13.       
  14.     public void Main() throws Exception  
  15.     {  
  16.         NaiveBayes m_classifier = new NaiveBayes();     //樸素貝葉斯的調用  
  17.           
  18.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\labor.arff");  
  19.         ArffLoader atf = new ArffLoader();  
  20.         atf.setFile(inputFile);  
  21.         Instances instancesTrain = atf.getDataSet();  
  22.         instancesTrain.setClassIndex(instancesTrain.numAttributes()-1);  
  23.           
  24.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\labor.arff");  
  25.         atf.setFile(inputFile);  
  26.         Instances instancesTest = atf.getDataSet();  
  27.         instancesTest.setClassIndex(instancesTest.numAttributes()-1);  
  28.           
  29.         double sum =  instancesTest.numInstances(),right = 0.0f;  
  30.           
  31.         m_classifier.buildClassifier(instancesTrain);  
  32.         System.out.println(m_classifier.toString());  
  33.         System.out.println("");  
  34.         for(int i = 0; i < sum ; i++)  
  35.         {  
  36.             if(m_classifier.classifyInstance(instancesTest.instance(i)) == instancesTest.instance(i).classValue())  
  37.             {  
  38.                 right++;  
  39.             }  
  40.         }  
  41.           
  42.         System.out.println("Navisbayes classification precision:" + (right/sum));  
  43.           
  44.     }  
  45.       
  46. //  public static void main(String[] args) throws Exception  
  47. //  {  
  48. //      callbayes a = new callbayes();  
  49.     //  a.Main();  
  50. //  }  
  51.       
  52. }  

             4.調用KNN算法:

  1. import weka.classifiers.*;  
  2. import weka.classifiers.lazy.IBk;  
  3. import weka.core.converters.*;  
  4. import weka.core.Instances;  
  5. import java.io.*;  
  6.   
  7. public class callKNN   
  8. {  
  9.     public callKNN()  
  10.     {}  
  11.       
  12.     public void Main() throws Exception  
  13.     {  
  14.         IBk m_classifier = new IBk(3);  
  15.     //  int k=3;  
  16.     //  Classifier m_classifier = new IBk(k);  
  17.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff");  
  18.         ArffLoader arf = new ArffLoader();  
  19.         arf.setFile(inputFile);  
  20.         Instances instancesTrain = arf.getDataSet();  
  21.           
  22.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.with.vendor.arff");  
  23.         arf.setFile(inputFile);  
  24.         Instances instancesTest = arf.getDataSet();  
  25.         instancesTest.setClassIndex(0);  
  26.           
  27.         double sum = instancesTest.numInstances(),right=0.0f;  
  28.         instancesTrain.setClassIndex(0);  
  29.           
  30.         m_classifier.buildClassifier(instancesTrain);  
  31.         System.out.println("The k is : "+m_classifier.getKNN());  
  32.         System.out.println("");  
  33.         System.out.println(m_classifier.toString());  
  34.         System.out.println("");  
  35.           
  36.         for(int i = 0; i<sum ; i++)  
  37.         {  
  38.             if(m_classifier.classifyInstance(instancesTest.instance(i)) == instancesTest.instance(i).classValue())  
  39.             {  
  40.                 right++;  
  41.             }  
  42.         }  
  43.         System.out.println("KNN classification precision:"+(right/sum));  
  44.     }  
  45.       
  46.     public static void main(String[] args) throws Exception  
  47.     {  
  48.         callKNN a = new callKNN();  
  49.         a.Main();  
  50.     }  
  51. }  

            5.調用ID3(CART) 算法

  1. import weka.classifiers.*;  
  2. import weka.classifiers.trees.Id3;  
  3. import weka.core.Instances;  
  4. import weka.core.converters.*;  
  5. import java.io.*;  
  6.   
  7. public class callId3  
  8. {  
  9.     public callId3()  
  10.     {}  
  11.       
  12.     public void Main() throws Exception  
  13.     {  
  14.         Id3 m_classifier = new Id3();  
  15.           
  16.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\contact-lenses.arff");  
  17.         ArffLoader atf = new ArffLoader();  
  18.         atf.setFile(inputFile);  
  19.         Instances instancesTrain = atf.getDataSet();  
  20.           
  21.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\contact-lenses.arff");  
  22.         atf.setFile(inputFile);  
  23.         Instances instancesTest = atf.getDataSet();  
  24.         instancesTest.setClassIndex(0);  
  25.           
  26.         double sum = instancesTest.numInstances(),right=0.0f;  
  27.           
  28.         instancesTrain.setClassIndex(0);  
  29.         m_classifier.buildClassifier(instancesTrain);  
  30.         System.out.println(m_classifier.toString());  
  31.         System.out.println("");  
  32.           
  33.         for(int i = 0; i < sum ; i++)  
  34.         {  
  35.             if(m_classifier.classifyInstance(instancesTest.instance(i)) == instancesTest.instance(i).classValue())  
  36.             {  
  37.                 right++;  
  38.             }  
  39.         }  
  40.           
  41.         System.out.println("Id3 classification precision:"+(right/sum));  
  42.     }  
  43.       
  44. //  public static void main(String[] args) throws Exception  
  45.     //{  
  46.     //  callId3 a = new callId3();  
  47.     //  a.Main();  
  48. //  }  
  49.       
  50. }  

        聚類算法:

        主要是調用了EM算法和KM算法,SVM由於還不會用libsvm,就先放着了,聚類算法的調用的不同分類算法之處就是不必設置分類屬性行號:

        1.調用EM算法;

         

  1. import weka.clusterers.EM;  
  2. import weka.core.Instances;  
  3. import weka.core.converters.*;  
  4. import weka.clusterers.*;  
  5. import java.io.*;  
  6.   
  7. public class callEM   
  8. {  
  9.     public callEM()  
  10.     {  
  11.     }  
  12.       
  13.     public void Main() throws Exception  
  14.     {  
  15.         EM m_cluster = new EM();  
  16.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.arff");   
  17.         ArffLoader arf = new ArffLoader();  
  18.         arf.setFile(inputFile);  
  19.         Instances instancesTrain = arf.getDataSet();  
  20.           
  21.          inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.arff");   
  22.          arf.setFile(inputFile);  
  23.          Instances instancesTest = arf.getDataSet();  
  24.            
  25.          m_cluster.buildClusterer(instancesTrain);  
  26.          System.out.println("The number of cluster : "+m_cluster.numberOfClusters());  
  27.          int num = m_cluster.numberOfClusters();  
  28.          System.out.println("");  
  29.          System.out.println(m_cluster.toString());  
  30.          System.out.println("");  
  31.            
  32.          double[]  predict = m_cluster.clusterPriors();  
  33.          for(int i = 0; i<num ; i++)  
  34.          {  
  35.             System.out.println("第  "+i+" 個 聚類的先驗爲 : "+predict[i]);  
  36.          }  
  37.     }  
  38.       
  39.     public static void main(String[] args) throws Exception  
  40.     {  
  41.         callEM a = new callEM();  
  42.         a.Main();  
  43.     }  
  44. }  

             2.調用KM算法;

  1. import weka.clusterers.*;  
  2. import weka.core.converters.*;  
  3. import weka.core.Instances;  
  4. import java.io.*;  
  5.   
  6. public class callKM  
  7. {  
  8.     public callKM()  
  9.     {  
  10.           
  11.     }  
  12.       
  13.     public void Main() throws Exception  
  14.     {  
  15.         SimpleKMeans m_cluster = new SimpleKMeans();  
  16.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.arff");   
  17.         ArffLoader arf = new ArffLoader();  
  18.         arf.setFile(inputFile);  
  19.         Instances instancesTrain = arf.getDataSet();  
  20.           
  21.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\cpu.arff");   
  22.         arf.setFile(inputFile);  
  23.         Instances instancesTest = arf.getDataSet();  
  24.           
  25.         m_cluster.buildClusterer(instancesTrain);  
  26.           
  27.         System.out.println("The number of cluster : "+m_cluster.numberOfClusters());  
  28.          int num = m_cluster.numberOfClusters();  
  29.          System.out.println("");  
  30.          System.out.println(m_cluster.toString());  
  31.          System.out.println("");  
  32.            
  33.          int[] size = m_cluster.getClusterSizes();  
  34.          int sum = 0;  
  35.          for(int i = 0; i<num ; i++)  
  36.          {  
  37.              sum += size[i];  
  38.          }  
  39.          for(int i = 0; i<num ; i++)  
  40.          {  
  41.             System.out.println("第  "+i+" 個 聚類的大小爲 : "+size[i]+"   所佔比例爲 : "+(double)size[i]/(double)sum);  
  42.          }  
  43.           
  44.     }  
  45.       
  46.     public static void main(String[] args) throws Exception  
  47.     {  
  48.         callKM a = new callKM();  
  49.         a.Main();  
  50.     }  
  51. }  

           關聯規則算法

           只是調用了Apriori算法,調用方法和聚類算法的基本一樣了。。。

           1.調用Apriori算法


            

  1. import weka.associations.*;  
  2. import weka.core.converters.*;  
  3. import weka.core.Instances;  
  4. import java.io.*;  
  5.   
  6. public class callApriori  
  7. {  
  8.     public callApriori()  
  9.     {  
  10.           
  11.     }  
  12.       
  13.     public void Main() throws Exception  
  14.     {  
  15.         Apriori m_association = new Apriori();  
  16.         File inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\contact-lenses.arff");  
  17.         ArffLoader arf = new ArffLoader();  
  18.         arf.setFile(inputFile);  
  19.         Instances instancesTrain = arf.getDataSet();  
  20.           
  21.         inputFile = new File("E:\\資料\\數據挖掘\\weka-3-5-8\\data\\contact-lenses.arff");  
  22.         arf.setFile(inputFile);  
  23.         Instances instancesTest = arf.getDataSet();  
  24.           
  25.         m_association.buildAssociations(instancesTrain);  
  26.         System.out.println("The Number of Rules : "+m_association.getNumRules());  
  27.         System.out.println(m_association.toString());  
  28.         System.out.println("");  
  29.           
  30.     }  
  31.       
  32. //  public static void main(String[] args) throws Exception  
  33. //  {  
  34.     //  callApriori a = new callApriori();  
  35. //      a.Main();  
  36. //  }  
  37. }  
發佈了10 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章