這篇只是最基礎簡單的使用教學

這篇基於 : https://dama.tw/threads/javabtccsv.705/ 取得的數據進行模型訓練

1. 使用 Smile​

Smile 是一個用 Java 編寫的機器學習庫,提供了豐富的算法和數據處理功能。Smile 的接口簡潔,性能良好,適合處理複雜的數據分析任務

github : https://github.com/haifengl/smile


Java:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;

import org.apache.commons.csv.CSVFormat;
import org.json.JSONArray;
import smile.data.Tuple;
import smile.data.type.StructType;
import tools.FileoutputUtil;

import smile.data.DataFrame;
import smile.data.formula.Formula;
import smile.io.Read;
import smile.regression.RandomForest;
public class BitcoinPricePrediction {
private static HttpClient client = HttpClient.newHttpClient();

    public static void main(String[] args) throws Exception {
        CSVFormat format = CSVFormat.DEFAULT.withHeader();

        DataFrame data = Read.csv("E:/btc/data.csv",format);


        // 显示数据集结构,确认数据已正确加载
        System.out.println(data.schema());
        System.out.println(data.summary());

        // 選擇特徵和標籤
        Formula formula = Formula.lhs("Low");

        // 分割數據為訓練集和測試集
        DataFrame[] splits = splitData(data, 0.8);
        DataFrame trainData = splits[0];
        DataFrame testData = splits[1];

        // 使用隨機森林進行訓練
        RandomForest model = RandomForest.fit(formula, trainData);

        // 在測試集上進行預測
        double[] predictions = model.predict(testData);

        // 获取时间列数据
        long[] times = testData.longVector("OpenTime").array();

        // 输出指定时间点的预测结果
        /*for (int i = 0; i < predictions.length; i++) {
            System.out.println("Time: " + FileoutputUtil.getTime2(times[i]) + ", Predicted Low: " + predictions[i]);
        }*/

        // 预测最后一条数据的下一时间点
        int lastRowIndex = data.nrows() - 1;
        DataFrame futureData = data.slice(lastRowIndex, lastRowIndex + 1); // 获取最后一行数据进行预测

        double[] predictionsA = model.predict(futureData);

        long[] timesA = futureData.longVector("OpenTime").array(); // 获取时间数据以打印结果

        // 输出预测结果
        if (predictionsA.length > 0) {
            System.out.println("Time: " + FileoutputUtil.getTime2(timesA[0]) + ", Predicted Low: " + predictions[0]);
        }
    }

    private static DataFrame[] splitData(DataFrame data, double trainSize) {
        int n = data.nrows();
        List<Integer> indices = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            indices.add(i);
        }
        Collections.shuffle(indices); // 随机打乱索引

        int trainCount = (int) (n * trainSize);

        DataFrame trainData = createDataFrameFromIndices(data, indices.subList(0, trainCount));
        DataFrame testData = createDataFrameFromIndices(data, indices.subList(trainCount, n));

        return new DataFrame[]{trainData, testData};
    }

    private static DataFrame createDataFrameFromIndices(DataFrame data, List<Integer> indices) {
        StructType schema = data.schema();
        List<Tuple> rows = new ArrayList<>();
        for (int index : indices) {
            rows.add(data.get(index));
        }
        return DataFrame.of(rows, schema);
    }
}


main(String[] args)​

這是Java程序的主入口函數。這個函數執行以下幾個主要任務:

  • 使用 Read.csv 從指定路徑加載CSV文件,該文件包含加密貨幣的交易數據。
  • 利用 Formula.lhs("Low") 確定模型將預測的目標變量(在此例中為 Low 這一列)。
  • 使用 splitData 函數將數據分割為訓練集和測試集。
  • 使用隨機森林算法訓練模型並在測試集上進行預測。
  • 從預測結果中提取並輸出指定時間點的預測結果。

splitData(DataFrame data, double trainSize)​

這個函數將整個數據集隨機分割成訓練集和測試集:

  • 接受整個 DataFrame 和訓練集所佔比例(trainSize)作為輸入。
  • 隨機打亂數據的索引,然後根據指定的比例分配索引到訓練集和測試集。
  • 根據這些索引,從原始 DataFrame 中提取對應行數據到新的 DataFrame 中。

createDataFrameFromIndices(DataFrame data, List<Integer> indices)​

這個函數根據給定的索引列表從原始數據集中提取行數據來創建新的 DataFrame:

  • 接受一個 DataFrame 和一個索引列表作為輸入。
  • 遍歷索引列表,對於每個索引,從原始數據集中提取相應的行數據。
  • 將這些行數據組合成一個新的 DataFrame,並返回。
這些函數共同完成了數據的加載、處理、模型訓練和預測等一系列操作,是機器學習應用中典型的數據管道流程。
 

twss966

Lv.1 初心者
註冊
2025-06-25
文章
1
評分
0
聲望
0
台北W飯店叫小姐LINE: tws966台北圓山大飯店叫小姐台北五星級酒店住宿推薦UT交友
 

附件

  • 514_副本.png
    514_副本.png
    511.1 KB · 查看: 0

Gleezyfb0304

Lv.1 初心者
註冊
2025-09-02
文章
34
評分
0
聲望
0
所在地
台北
主頁
t.me
gleezy號fb0304大屌顶着嫩穴操!极品身材高颜值美女被捅主任举起来操!无毛美穴性感美脚telegram賬號:fb0304gleezy號fb0304大屌顶着嫩穴操!极品身材高颜值美女被捅主任举起来操!无毛美穴性感美脚telegram賬號:fb0304gleezy號fb0304大屌顶着嫩穴操!极品身材高颜值美女被捅主任举起来操!无毛美穴性感美脚telegram賬號:fb0304
 

附件

  • photo_2025-08-26_13-37-39.jpg
    photo_2025-08-26_13-37-39.jpg
    526.8 KB · 查看: 0

Gleezyfb0304

Lv.1 初心者
註冊
2025-09-02
文章
34
評分
0
聲望
0
所在地
台北
主頁
t.me
台灣旅遊正妹外約TG搜@fb0304 Gleezy:fb0304台北出差賴xj9520找小姐,旅館飯店外叫小姐,渺渺外送茶/台灣出差找外送茶,台北外送茶/台中外送茶/ 台北一夜情人,外約台北旅館推薦,台北外約電話,魚訊網台北茶訊,高雄外送茶 /新竹(竹北)外送茶,彰化外送茶,喝茶討論區,新店正妹賴xj9520介紹,板橋旅館飯店找 女人按摩叫小姐3P服務,泰山找小姐開房三重外送服務,新莊旅館飯店叫小姐, 新北市外送,新店外叫小姐,士林外送茶,土城叫小姐,林口約正妹, 淡水愛愛茶,三重找茶,台北酒店叫小姐,台北找魚論壇+TG搜@fb0304 Gleezy:fb0304 找女人網外送服務,台北約高檔茶,淡水外送到府現金消費,土城旅館飯店叫小姐, 找茶網,林口住家叫小姐,台北外約愛愛,新店討論區出差叫小姐,新莊找女人開房間外送配宅 找茶訊外叫小姐出差找小姐,體驗好茶,林口外叫小姐服務,彰化外叫茶,高雄外送茶,台中3K叫外送茶, 台北夜生活高雄出差叫小姐,高雄找女人打炮,高雄叫小姐服務,彰化外送茶TG搜@fb0304 Gleezy:fb0304
 

Gleezyfb0304

Lv.1 初心者
註冊
2025-09-02
文章
34
評分
0
聲望
0
所在地
台北
主頁
t.me
台灣旅遊正妹外約TG搜@fb0304 Gleezy:fb0304台北出差賴xj9520找小姐,旅館飯店外叫小姐,渺渺外送茶/台灣出差找外送茶,台北外送茶/台中外送茶/ 台北一夜情人,外約台北旅館推薦,台北外約電話,魚訊網台北茶訊,高雄外送茶 /新竹(竹北)外送茶,彰化外送茶,喝茶討論區,新店正妹賴xj9520介紹,板橋旅館飯店找 女人按摩叫小姐3P服務,泰山找小姐開房三重外送服務,新莊旅館飯店叫小姐, 新北市外送,新店外叫小姐,士林外送茶,土城叫小姐,林口約正妹, 淡水愛愛茶,三重找茶,台北酒店叫小姐,台北找魚論壇+TG搜@fb0304 Gleezy:fb0304 找女人網外送服務,台北約高檔茶,淡水外送到府現金消費,土城旅館飯店叫小姐, 找茶網,林口住家叫小姐,台北外約愛愛,新店討論區出差叫小姐,新莊找女人開房間外送配宅 找茶訊外叫小姐出差找小姐,體驗好茶,林口外叫小姐服務,彰化外叫茶,高雄外送茶,台中3K叫外送茶, 台北夜生活高雄出差叫小姐,高雄找女人打炮,高雄叫小姐服務,彰化外送茶TG搜@fb0304 Gleezy:fb0304
 

Gleezysk3826

Lv.1 初心者
註冊
2025-12-24
文章
19
評分
0
聲望
0
台灣優質老字號外送茶Gleezy:sk3826和TG:sk38266首次約妹即可享立減1000-3000現金折扣(外約飯店旅館酒店住家 見面現金交易 所有的女生都是本土台妹短期兼職的 都會定期健檢安全衛生可靠 歡迎各位如果在別家被話術踩雷的可以來找小兮聊看看 現金消費|飯店 旅館 住家皆可|即時外約 台灣外送茶首選平台|糖小兮外送茶提供全台灣約妹服務 支援台北、台中、高雄、桃園、新竹、彰化、台南地區,學生茶、人妻茶、空姐茶、模特茶、雙飛茶、無套茶、平價高檔尤物茶應有盡有,優質正妹資訊每日更新 官網 www.ppp8669.com