【毕设进行时-工业大数据,数据挖掘】LIBSVM 初步测试

正文之前

打摆子的日子很快就要一去不复返了。想想有点悲伤。今天做了下LibSVM的初步运用,也写了个从数据库读取数据,然后改造成LibSVM需要的数据格式的类,需要的自取。

正文

这是个从前面的ReadData.java变种来的家伙:

import java.io.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SVMReadData {
    private Object[] Name;
    protected Mysql_Connect mysql=new Mysql_Connect();
    private int rate = 20;
    private static int atoi(String s) {
        return Integer.parseInt(s);
    }
    SVMReadData() throws IOException {
        File file = new File("/Users/zhangzhaobo/IdeaProjects/Graduation_Design/src/New_Data.txt");
        BufferedReader in = new BufferedReader(new FileReader(file));
        String line;  //一行数据作为属性名字
        line = in.readLine();
        in.close();
        Name = line.split("\t\t");
    }

    public String readTrainData() {
        int columnCount=0;
        try {
            mysql.Connect();
            Statement statement=mysql.getStatement();
            String GETCOLUMN="select max(id) from steelplate";
            String getDataQuery="";
            FileWriter svmTrainData = new FileWriter("svmTrainData.txt");
            ResultSet answer = statement.executeQuery(GETCOLUMN);
            if(answer.next())
                columnCount  = answer.getInt(1);
            Object[][] DataTrain = new Object[columnCount/rate*(rate-1)][7];
            int count = 0;
            for (int  i = 0;i<columnCount;++i) {
                if(i%rate != 1) {
                    getDataQuery = ReadData.getSelectQuery(Name, "steelplate", i);
                    ResultSet selectTrainOk;
                    selectTrainOk = statement.executeQuery(getDataQuery);
                    selectTrainOk.next();
                    for (int j = 0; j < 7; ++j) {
                        DataTrain[count][j] = selectTrainOk.getObject((String) Name[j]);
                    }
                    if(atoi((String) DataTrain[count][DataTrain[0].length-1])<6)
                        svmTrainData.write("1 ");
                    else
                        svmTrainData.write("0 ");
                    for (int j = 0; j<DataTrain[0].length-1; ++j ){
                        svmTrainData.write(j+":"+DataTrain[count][j]+" ");
                    }
                    svmTrainData.write("\n");
                    count++;
                }
            }
            svmTrainData.close();
            statement.close();
            mysql.Dis_Connect();
            return "svmTrainData.txt";
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "svmTrainData.txt";
    }

    public String readTestData() {
        int columnCount=0;
        try {
            mysql.Connect();
            Statement statement=mysql.getStatement();
            String GETCOLUMN="select max(id) from steelplate";
            Object[][] DataTest;
            ResultSet answer = statement.executeQuery(GETCOLUMN);
            if(answer.next())
                columnCount  = answer.getInt(1);
            DataTest = new Object[columnCount/rate][7];
            try {
                FileWriter svmTestData = new FileWriter("svmTestData.txt");
                for (int i = 0; i < columnCount; ++i) {
                    if (i % rate == 1) {
                        String getDataQuery = ReadData.getSelectQuery(Name, "steelplate", i);
                        ResultSet selectTestOk;
                        selectTestOk = statement.executeQuery(getDataQuery);
                        selectTestOk.next();
                        for (int j = 0; j < 7; ++j) {
                            DataTest[i / rate][j] = selectTestOk.getObject((String) Name[j]);
                        }
                        if(atoi((String) DataTest[i / rate][DataTest[0].length-1])<6)
                            svmTestData.write("1 ");
                        else
                            svmTestData.write("0 ");
                        for (int j = 0; j < DataTest[0].length - 1; ++j) {
                            svmTestData.write(j + ":" + DataTest[i / rate][j] + " ");
                        }
                        svmTestData.write("\n");
                    }
                }
                svmTestData.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            statement.close();
            mysql.Dis_Connect();
            return "svmTestData.txt";
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return "svmTestData.txt";
    }
}

会得到下面的这种格式的数据存储形式:

1 0:0 1:2 2:11 3:7 4:1 5:80 
1 0:0 1:2 2:11 3:6 4:0 5:200 
1 0:1 1:3 2:13 3:11 4:0 5:70 
1 0:0 1:1 2:6 3:6 4:1 5:120 
1 0:0 1:1 2:11 3:5 4:0 5:40 
1 0:1 1:2 2:11 3:4 4:0 5:70 
1 0:1 1:4 2:13 3:7 4:0 5:90 
1 0:0 1:5 2:11 3:12 4:1 5:100 
1 0:1 1:5 2:14 3:9 4:1 5:70 
1 0:0 1:1 2:7 3:9 4:1 5:70 
1 0:1 1:11 2:18 3:8 4:1 5:70 
1 0:1 1:1 2:6 3:5 4:1 5:70 
1 0:1 1:1 2:11 3:5 4:1 5:70 
1 0:3 1:7 2:21 3:9 4:1 5:70 
1 0:1 1:0 2:6 3:4 4:1 5:70 
1 0:2 1:1 2:11 3:3 4:1 5:70 
1 0:1 1:4 2:13 3:7 4:1 5:70 
1 0:0 1:3 2:11 3:3 4:0 5:175 
1 0:0 1:1 2:6 3:8 4:0 5:40 
1 0:0 1:0 2:5 3:4 4:0 5:40 
1 0:11 1:11 2:36 3:23 4:0 5:40 
1 0:2 1:2 2:13 3:2 4:0 5:40 
1 0:14 1:11 2:31 3:22 4:0 5:40 
1 0:11 1:11 2:34 3:22 4:0 5:40 
1 0:11 1:11 2:31 3:22 4:0 5:40 
1 0:11 1:5 2:24 3:17 4:0 5:40 
1 0:11 1:5 2:25 3:16 4:0 5:40 
1 0:2 1:0 2:11 3:3 4:0 5:40 
1 0:11 1:4 2:23 3:16 4:0 5:40 
1 0:11 1:5 2:26 3:17 4:0 5:40 
1 0:11 1:6 2:27 3:15 4:0 5:40 
1 0:0 1:0 2:0 3:1 4:0 5:40 
1 0:11 1:7 2:27 3:18 4:0 5:40 
1 0:11 1:6 2:26 3:17 4:0 5:40 
1 0:11 1:6 2:26 3:17 4:0 5:40 
1 0:11 1:6 2:26 3:16 4:0 5:40 
1 0:11 1:5 2:23 3:11 4:0 5:40 
1 0:0 1:1 2:8 3:5 4:0 5:50 
1 0:0 1:0 2:0 3:3 4:0 5:50 
1 0:0 1:0 2:1 3:3 4:0 5:50 
1 0:0 1:0 2:1 3:8 4:0 5:50 
1 0:0 1:3 2:11 3:4 4:0 5:40 
1 0:1 1:11 2:17 3:7 4:0 5:100 
1 0:0 1:2 2:11 3:4 4:0 5:100 
1 0:1 1:2 2:12 3:5 4:1 5:70 
1 0:1 1:0 2:6 3:9 4:1 5:60 
1 0:2 1:2 2:13 3:13 4:1 5:60 
1 0:2 1:1 2:12 3:5 4:1 5:60 
1 0:0 1:0 2:5 3:4 4:1 5:70 
1 0:0 1:1 2:6 3:5 4:0 5:40 
1 0:0 1:0 2:5 3:5 4:1 5:100 
1 0:0 1:2 2:8 3:5 4:1 5:80 
1 0:0 1:0 2:2 3:5 4:1 5:100 
1 0:3 1:3 2:17 3:24 4:1 5:70 
1 0:1 1:4 2:12 3:6 4:0 5:40 
1 0:0 1:1 2:5 3:4 4:0 5:185 
1 0:1 1:4 2:13 3:14 4:0 5:100 
1 0:1 1:1 2:11 3:9 4:1 5:80 
1 0:2 1:2 2:12 3:5 4:1 5:80 
1 0:0 1:3 2:11 3:8 4:1 5:70 
1 0:2 1:1 2:11 3:5 4:1 5:80 
1 0:1 1:3 2:13 3:8 4:1 5:80 
1 0:2 1:4 2:17 3:10 4:0 5:40 
1 0:1 1:2 2:12 3:16 4:1 5:200 
0 0:1 1:4 2:13 3:7 4:1 5:80 
0 0:0 1:2 2:11 3:6 4:0 5:200 
0 0:2 1:1 2:11 3:4 4:0 5:40 
0 0:0 1:1 2:5 3:7 4:0 5:40 
0 0:3 1:4 2:21 3:14 4:0 5:40 
0 0:12 1:1 2:21 3:7 4:1 5:100 
0 0:1 1:1 2:11 3:6 4:1 5:80 
0 0:1 1:1 2:11 3:3 4:1 5:70 
0 0:0 1:1 2:5 3:6 4:1 5:100 
0 0:1 1:2 2:11 3:7 4:0 5:40 
0 0:1 1:4 2:13 3:4 4:0 5:300 
0 0:1 1:5 2:15 3:6 4:0 5:300 
0 0:1 1:12 2:21 3:23 4:0 5:70 
0 0:1 1:2 2:12 3:8 4:0 5:40 
0 0:1 1:0 2:3 3:3 4:0 5:180 
0 0:1 1:11 2:19 3:9 4:1 5:80 
0 0:1 1:7 2:17 3:8 4:1 5:100 
0 0:1 1:3 2:12 3:7 4:1 5:70 
0 0:1 1:1 2:11 3:4 4:0 5:40 
0 0:1 1:1 2:11 3:9 4:1 5:80 
0 0:1 1:4 2:12 3:4 4:0 5:40 
0 0:1 1:2 2:11 3:3 4:0 5:220 
0 0:0 1:2 2:11 3:4 4:0 5:40 
0 0:2 1:2 2:12 3:2 4:0 5:40 
0 0:3 1:2 2:15 3:8 4:1 5:70 
0 0:2 1:1 2:12 3:4 4:0 5:40 
0 0:1 1:1 2:6 3:4 4:1 5:300 
0 0:0 1:11 2:15 3:7 4:0 5:40 
0 0:3 1:0 2:11 3:4 4:0 5:100 
0 0:1 1:1 2:8 3:14 4:1 5:70 
0 0:2 1:1 2:7 3:6 4:1 5:69 
0 0:1 1:0 2:6 3:7 4:1 5:143 
0 0:3 1:2 2:13 3:5 4:0 5:40 
libSVM的数据格式

Label index:value index:value ….

  • Label:是类别的标识.如果是回归,这是目标值,就要实事求是了。

  • Index: 是属性序号,记住给整数啊,我给了个属性名字简直就GG了。

  • Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开,比如: -15 1:0.708 2:1056 3:-0.3333
    需要注意的是,如果特征值为0,特征冒号前面的(姑且称做序号)可以不连续。如:-15 1:0.708 3:-0.3333

下面是主函数的入口:

import java.io.IOException;

public class ZZB_SVM {
    public static void main() throws IOException {
        SVMReadData sr = new SVMReadData();
        String trainFileName = sr.readTrainData();
        String testFileName = sr.readTestData();
        String[] arg = { trainFileName, //训练集
                "model.txt" }; // 存放SVM训练模型

        String[] parg = { testFileName, //测试数据
                "model.txt", // 调用训练模型
                "predict.txt" }; //预测结果
        System.out.println("........SVM运行开始..........");
        long start=System.currentTimeMillis();
        svm_train.main(arg); //训练
        System.out.println("用时:"+(System.currentTimeMillis()-start));
        //预测
        svm_predict.main(parg);
    }
}

正文之后

溜了。心累~

到底是谁把天聊死了??
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容