在使用 libsvm 3.18 內建的 heart_scale 範例數據集時,許多使用者在 MATLAB 中透過 load heart_scale 指令載入時,會遇到「ASCII 文件第 3 行列數與前幾行不一致」的錯誤訊息。這篇文章記錄了問題排查過程、官方檢測工具的反饋,以及最終自行修補缺失數據的完整解決方案,供遇到相同問題的開發者參考。
嘗試在 MATLAB 中載入 heart_scale 時,系統拋出錯誤:
>> load heart_scale
錯誤使用 load
ASCII 文件 heart_scale 的第 3 行中的列數必須與前面行中的列數相同。
顯然數據文件的格式不符合 MATLAB 讀取要求,導致無法正常載入。
根據 libsvm README 說明,可使用 tools/checkdata.py 檢測數據格式是否正確。執行檢測後,工具同樣回報數據存在錯誤,確認問題出在數據文件本身而非讀取方式。
通過人工比對文件內容,發現 heart_scale 文件確實存在多行數據缺失的情況。進一步嘗試下載官方 tar.gz 壓縮包、查看 GitHub 原始碼庫,結果皆相同——原始分發文件即已缺失數據。
觀察缺失位置發現,所有遺漏的特徵值均為 0。推測 libsvm 稀疏格式中「值為 0 時省略不寫」的慣例,可能在轉換為密集矩陣格式時未正確補零,導致列數對不齊。由於缺失行數較多,手動修補不切實際,最終找到一份經修正、可直接在 MATLAB 中載入的完整版本供下載使用。
以第 11 列為例,原文件缺失該列數值,補全為 11:0 即可恢復列數一致性。同理推演至所有缺失行,即可獲得符合 MATLAB load 要求的矩陣格式。
若您在使用 libsvm 範例數據集時遇到類似載入錯誤,建議優先檢查數據文件完整性,並參考本文修補思路或直接使用已修正版本,避免在格式問題上浪費時間。