[{"data":1,"prerenderedAt":1206},["ShallowReactive",2],{"navigation_docs":3,"-machine-learning-lightgbm-intro-for-tabular-data":352,"-machine-learning-lightgbm-intro-for-tabular-data-surround":1201},[4,54,83,116,125,161,179,200],{"title":5,"path":6,"stem":7,"children":8},"Ai","/ai","ai",[9,12,42,46,50],{"title":10,"path":6,"stem":11},"AI 技術探索","ai/index",{"title":13,"path":14,"stem":15,"children":16,"page":41},"Rag","/ai/rag","ai/RAG",[17,21,25,29,33,37],{"title":18,"path":19,"stem":20},"BM25 演算法深入解析：從 TF-IDF 到現代搜尋引擎的核心技術","/ai/rag/bm25-deep-dive-from-tf-idf-to-rag","ai/RAG/bm25-deep-dive-from-tf-idf-to-rag",{"title":22,"path":23,"stem":24},"Dense Retrieval（向量檢索）深入解析","/ai/rag/dense-retrieval-deep-dive","ai/RAG/dense-retrieval-deep-dive",{"title":26,"path":27,"stem":28},"RAG（Retrieval-Augmented Generation）原理與實作入門","/ai/rag/rag-intro-principles-and-implementation","ai/RAG/rag-intro-principles-and-implementation",{"title":30,"path":31,"stem":32},"RAG Retrieval Strategy 深入解析","/ai/rag/rag-retrieval-strategy-deep-dive","ai/RAG/rag-retrieval-strategy-deep-dive",{"title":34,"path":35,"stem":36},"Reciprocal Rank Fusion（RRF）教學：打造更穩定的檢索融合策略","/ai/rag/rrf-reciprocal-rank-fusion-guide","ai/RAG/rrf-reciprocal-rank-fusion-guide",{"title":38,"path":39,"stem":40},"TF-IDF（Term Frequency–Inverse Document Frequency）深入解析","/ai/rag/tf-idf-deep-dive","ai/RAG/tf-idf-deep-dive",false,{"title":43,"path":44,"stem":45},"Docus AI 功能完整實作指南","/ai/docus-ai-implementation","ai/docus-ai-implementation",{"title":47,"path":48,"stem":49},"llms.txt 是什麼？在 Nuxt 中控制 AI 與搜尋引擎爬蟲的新方式","/ai/llms-txt","ai/llms-txt",{"title":51,"path":52,"stem":53},"MCP（Model Context Protocol）是什麼？用「AI 的 USB-C」理解模型如何安全連接工具與資料","/ai/mcp_concept","ai/mcp_concept",{"title":55,"path":56,"stem":57,"children":58,"page":41},"Data Analysis","/data-analysis","data-analysis",[59,63,67,71,75,79],{"title":60,"path":61,"stem":62},"Exploratory Data Analysis（EDA）資料探索分析入門","/data-analysis/exploratory-data-analysis-eda","data-analysis/exploratory-data-analysis-eda",{"title":64,"path":65,"stem":66},"PR-AUC 深入解析：不平衡分類問題的重要評估指標","/data-analysis/pr-auc-for-imbalanced-classification","data-analysis/pr-auc-for-imbalanced-classification",{"title":68,"path":69,"stem":70},"ROC-AUC 深入解析：理解分類模型的判斷能力","/data-analysis/roc-auc-complete-guide","data-analysis/roc-auc-complete-guide",{"title":72,"path":73,"stem":74},"SHAP（SHapley Additive exPlanations）模型解釋方法深入解析","/data-analysis/shap-model-interpretation-complete-guide","data-analysis/shap-model-interpretation-complete-guide",{"title":76,"path":77,"stem":78},"Social Network Analysis（SNA）深入解析","/data-analysis/social-network-analysis-sna","data-analysis/social-network-analysis-sna",{"title":80,"path":81,"stem":82},"Time-based Split：為什麼時間序列資料不能使用 Random Split？","/data-analysis/time-based-split-vs-random-split","data-analysis/time-based-split-vs-random-split",{"title":84,"path":85,"stem":86,"children":87,"page":41},"MachineLearning","/machine_learning","machine_learning",[88,92,96,100,104,108,112],{"title":89,"path":90,"stem":91},"Confusion Matrix（混淆矩陣）完整解析","/machine_learning/confusion-matrix","machine_learning/confusion-matrix",{"title":93,"path":94,"stem":95},"Decision Tree 模型完整教學：從原理到 Python 實作","/machine_learning/decision-tree-complete-guide","machine_learning/decision-tree-complete-guide",{"title":97,"path":98,"stem":99},"為什麼 Decision Tree 在 Tabular Data 上常常勝過 Deep Learning？","/machine_learning/decision-tree-vs-deep-learning-on-tabular-data","machine_learning/decision-tree-vs-deep-learning-on-tabular-data",{"title":101,"path":102,"stem":103},"LightGBM 模型入門：理解高效能的 Gradient Boosting 演算法","/machine_learning/lightgbm-intro-for-tabular-data","machine_learning/lightgbm-intro-for-tabular-data",{"title":105,"path":106,"stem":107},"Logistic Regression（Logit 回歸）完整教學","/machine_learning/logistic-regression-complete-guide","machine_learning/logistic-regression-complete-guide",{"title":109,"path":110,"stem":111},"為什麼模型訓練需要 Train / Validation / Test Dataset？","/machine_learning/train-validation-test-dataset","machine_learning/train-validation-test-dataset",{"title":113,"path":114,"stem":115},"XGBoost 原理與實務教學","/machine_learning/xgboost-complete-guide","machine_learning/xgboost-complete-guide",{"title":117,"path":118,"stem":119,"children":120,"page":41},"Network","/network","network",[121],{"title":122,"path":123,"stem":124},"DNS 設定入門：CNAME vs A Record 完整解析","/network/dns-cname-vs-a-record-guide","network/dns-cname-vs-a-record-guide",{"title":126,"path":127,"stem":128,"children":129},"Nuxt","/nuxt","nuxt",[130,133,137,141,145,149,153,157],{"title":131,"path":127,"stem":132},"Nuxt 實戰指南","nuxt/index",{"title":134,"path":135,"stem":136},"Abstraction Layer 與 Adapter 的差別，一次搞懂設計角色","/nuxt/adapter_abstraction_layer","nuxt/adapter_abstraction_layer",{"title":138,"path":139,"stem":140},"Nuxt 4 全面理解 — 專案檔案結構解析","/nuxt/directory_structure","nuxt/directory_structure",{"title":142,"path":143,"stem":144},"Nuxt 前端 build 流程完整解析","/nuxt/frontend_build","nuxt/frontend_build",{"title":146,"path":147,"stem":148},"Nitro 是什麼？從 Nuxt 專案到 Server 與 Edge 的關鍵引擎","/nuxt/nitro","nuxt/nitro",{"title":150,"path":151,"stem":152},"深入理解 Nuxt 的 .nuxt 與 .output：為什麼部署時一定要分清楚？","/nuxt/nuxt_and_output","nuxt/nuxt_and_output",{"title":154,"path":155,"stem":156},"Nuxt 中 dev、build、preview 的差異一次搞懂","/nuxt/nuxt_dev_build_preview","nuxt/nuxt_dev_build_preview",{"title":158,"path":159,"stem":160},"Nuxt Image vs \u003Cimg>：為什麼 Nuxt 3 專案幾乎都該用 \u003CNuxtImg>？","/nuxt/nuxt_image","nuxt/nuxt_image",{"title":162,"path":163,"stem":164,"children":165},"Python 程式開發","/python","python/index",[166,167,171,175],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"如何在 FastAPI 中調用記憶體 Buffer 回傳圖片 (附實例)","/python/memory_buffer","python/memory_buffer",{"title":172,"path":173,"stem":174},"Python 單元測試教學：如何為你的程式撰寫 Test","/python/python-unit-testing-unittest-pytest","python/python-unit-testing-unittest-pytest",{"title":176,"path":177,"stem":178},"如何使用 uv 取代 pip：改善 Python 專案的開發流程","/python/uv","python/uv",{"title":180,"path":181,"stem":182,"children":183,"page":41},"Statistic","/statistic","statistic",[184,188,192,196],{"title":185,"path":186,"stem":187},"卡方檢定（Chi-Square Test）入門教學","/statistic/chi-square-test-intro","statistic/chi-square-test-intro",{"title":189,"path":190,"stem":191},"常見抽樣方法（Sampling Methods）教學：Stratified、Quota、Convenience、Systematic、Simple Random","/statistic/common-sampling-methods-guide","statistic/common-sampling-methods-guide",{"title":193,"path":194,"stem":195},"Cramér’s V 指標介紹：如何衡量兩個類別變數之間的關聯","/statistic/cramers-v-for-categorical-association","statistic/cramers-v-for-categorical-association",{"title":197,"path":198,"stem":199},"Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定：非參數統計檢定的入門指南","/statistic/mann-whitney-u-and-ks-test-intro","statistic/mann-whitney-u-and-ks-test-intro",{"title":201,"path":202,"stem":203,"children":204},"WebDev","/web_dev","web_dev",[205,208,234,248,282,312,334],{"title":206,"path":202,"stem":207},"Web 前端開發","web_dev/index",{"title":209,"path":210,"stem":211,"children":212},"瀏覽器與渲染","/web_dev/browser","web_dev/browser/index",[213,214,218,222,226,230],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"瀏覽器儲存空間完整解析：Cookie、localStorage、IndexedDB 到 Cache Storage","/web_dev/browser/browser-storage-comprehensive-guide","web_dev/browser/browser-storage-comprehensive-guide",{"title":219,"path":220,"stem":221},"DOM (Document Object Model) 深入解析","/web_dev/browser/dom","web_dev/browser/dom",{"title":223,"path":224,"stem":225},"Service Worker Request Flow 深入解析","/web_dev/browser/service-worker-request-flow","web_dev/browser/service-worker-request-flow",{"title":227,"path":228,"stem":229},"CSR、SSR 與 SSG 是什麼？前端渲染策略完整比較","/web_dev/browser/ssr_csr_ssg","web_dev/browser/ssr_csr_ssg",{"title":231,"path":232,"stem":233},"Virtual DOM 深入解析：為什麼它能優化前端效能？","/web_dev/browser/virtual_dom","web_dev/browser/virtual_dom",{"title":235,"path":236,"stem":237,"children":238},"圖形技術","/web_dev/graphics","web_dev/graphics/index",[239,240,244],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"為什麼 Three.js 專案幾乎都選擇 CSR？從 SSR 問題談起","/web_dev/graphics/threejs_csr","web_dev/graphics/threejs_csr",{"title":245,"path":246,"stem":247},"WebGL 是什麼？為什麼前端 3D 幾乎都靠它？","/web_dev/graphics/webgl","web_dev/graphics/webGL",{"title":249,"path":250,"stem":251,"children":252},"架構與配置","/web_dev/infrastructure","web_dev/infrastructure/index",[253,254,258,262,266,270,274,278],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257},"Zeabur + K3s + Nuxt 部署架構完整解析","/web_dev/infrastructure/k3s-zeabur","web_dev/infrastructure/K3s-zeabur",{"title":259,"path":260,"stem":261},"ECS vs Docker vs Kubernetes：從部署堆疊理解三層架構","/web_dev/infrastructure/ecs-docker-kubernetes-stack","web_dev/infrastructure/ecs-docker-kubernetes-stack",{"title":263,"path":264,"stem":265},"ECS vs VPS 是什麼？從部署網站的角度一次搞懂差別","/web_dev/infrastructure/ecs-vs-vps","web_dev/infrastructure/ecs-vs-vps",{"title":267,"path":268,"stem":269},"Zeabur 內網服務連線完整入門指南","/web_dev/infrastructure/k3s-internal-networking","web_dev/infrastructure/k3s-internal-networking",{"title":271,"path":272,"stem":273},"使用 Microservices 架構設計系統的優勢解析","/web_dev/infrastructure/microservices-architecture-advantages","web_dev/infrastructure/microservices-architecture-advantages",{"title":275,"path":276,"stem":277},"Nginx 入門教學：從反向代理到與 Kubernetes 的架構比較","/web_dev/infrastructure/nginx-intro","web_dev/infrastructure/nginx-intro",{"title":279,"path":280,"stem":281},"YAML 配置是什麼？為什麼現代開發都在用它","/web_dev/infrastructure/yaml-configuration","web_dev/infrastructure/yaml-configuration",{"title":283,"path":284,"stem":285,"children":286},"網絡與通訊","/web_dev/network","web_dev/network/index",[287,288,292,296,300,304,308],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"HTTP Request 結構完整解析：從 Request Line 到 Header 一次看懂","/web_dev/network/http-request-structure","web_dev/network/http-request-structure",{"title":293,"path":294,"stem":295},"OSI 模型（Open Systems Interconnection Model）完整解析","/web_dev/network/osi-model","web_dev/network/osi-model",{"title":297,"path":298,"stem":299},"RESTful API 設計原則與實務解析","/web_dev/network/restful-api","web_dev/network/restful-api",{"title":301,"path":302,"stem":303},"RESTful API 五大設計原則深入解析","/web_dev/network/restful-api-principles","web_dev/network/restful-api-principles",{"title":305,"path":306,"stem":307},"Server-Sent Events (SSE) 深入解析與實作教學","/web_dev/network/sse-introduction","web_dev/network/sse-introduction",{"title":309,"path":310,"stem":311},"WebSocket 入門教學：從概念到 Node.js 實作","/web_dev/network/websocket-introduction","web_dev/network/websocket-introduction",{"title":313,"path":314,"stem":315,"children":316},"認證與安全","/web_dev/security","web_dev/security/index",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"使用 Cookie 與 Session 建立使用者驗證（完整新手教學）","/web_dev/security/cookie-session-authentication","web_dev/security/cookie-session-authentication",{"title":323,"path":324,"stem":325},"JWT 驗證機制完整解析：從登入流程到實務應用","/web_dev/security/jwt-authentication","web_dev/security/jwt-authentication",{"title":327,"path":328,"stem":329},"Secret Key 簽名是什麼？從零理解資料簽名的本質","/web_dev/security/secret-key-signing","web_dev/security/secret-key-signing",{"title":331,"path":332,"stem":333},"SSH（Secure Shell）是什麼？從遠端登入到安全通道的核心概念","/web_dev/security/ssh","web_dev/security/ssh",{"title":335,"path":336,"stem":337,"children":338},"SEO 與規範","/web_dev/seo","web_dev/seo/index",[339,340,344,348],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Canonical URL 是什麼？用生活化方式搞懂前端 SEO 的基本保命符","/web_dev/seo/canonical_link","web_dev/seo/canonical_link",{"title":345,"path":346,"stem":347},"robots.txt 是什麼？SEO 的第一道守門員","/web_dev/seo/robot_txt","web_dev/seo/robot_txt",{"title":349,"path":350,"stem":351},"Nuxt SEO 中的 Meta 與 SEO 工具是如何運作的？","/web_dev/seo/seo","web_dev/seo/seo",{"id":353,"title":101,"body":354,"description":1190,"extension":1191,"links":1192,"meta":1193,"navigation":830,"path":102,"seo":1199,"stem":103,"__hash__":1200},"docs/machine_learning/lightgbm-intro-for-tabular-data.md",{"type":355,"value":356,"toc":1176},"minimark",[357,362,366,369,446,463,474,485,488,492,498,509,515,518,537,540,549,551,555,558,568,574,576,614,617,619,623,630,642,645,650,657,659,663,666,671,674,680,682,688,691,697,704,708,714,724,727,736,750,752,756,759,1047,1050,1067,1069,1073,1080,1097,1104,1115,1118,1120,1123,1137,1143,1145,1148,1172],[358,359,361],"h2",{"id":360},"為什麼需要-lightgbm","為什麼需要 LightGBM？",[363,364,365],"p",{},"在機器學習中，我們常常會遇到這樣的問題：如何從一堆資料中建立一個模型，去預測某件事情會不會發生？",[363,367,368],{},"例如：",[370,371,372,395],"table",{},[373,374,375],"thead",{},[376,377,378,383,386,389,392],"tr",{},[379,380,382],"th",{"align":381},"right","user_id",[379,384,385],{"align":381},"age",[379,387,388],{"align":381},"income",[379,390,391],{"align":381},"transactions",[379,393,394],{"align":381},"fraud",[396,397,398,416,432],"tbody",{},[376,399,400,404,407,410,413],{},[401,402,403],"td",{"align":381},"1",[401,405,406],{"align":381},"25",[401,408,409],{"align":381},"45000",[401,411,412],{"align":381},"12",[401,414,415],{"align":381},"0",[376,417,418,421,424,427,430],{},[401,419,420],{"align":381},"2",[401,422,423],{"align":381},"42",[401,425,426],{"align":381},"98000",[401,428,429],{"align":381},"3",[401,431,415],{"align":381},[376,433,434,436,439,442,444],{},[401,435,429],{"align":381},[401,437,438],{"align":381},"31",[401,440,441],{"align":381},"52000",[401,443,403],{"align":381},[401,445,403],{"align":381},[363,447,448,449,453,454,457,458,457,460,462],{},"如果我們的目標是預測 ",[450,451,452],"strong",{},"fraud（是否為詐欺交易）","，那麼模型就需要根據 ",[455,456,385],"code",{},"、",[455,459,388],{},[455,461,391],{}," 等特徵來做判斷。",[363,464,465,466,469,470,473],{},"在這類 ",[450,467,468],{},"tabular data（表格資料）"," 的問題中，",[450,471,472],{},"tree-based model（樹模型）"," 通常表現非常好，而 LightGBM 正是目前最常使用的模型之一。",[363,475,476,477,480,481,484],{},"LightGBM 是 ",[450,478,479],{},"Microsoft 在 2017 年開源的 Gradient Boosting 框架","，設計目標是讓模型在 ",[450,482,483],{},"大型資料集上訓練得更快、佔用更少記憶體，同時保持很高的預測準確度","。",[486,487],"hr",{},[358,489,491],{"id":490},"lightgbm-的核心概念boosting","LightGBM 的核心概念：Boosting",[363,493,494,495,484],{},"LightGBM 的核心思想其實來自 ",[450,496,497],{},"Gradient Boosting",[363,499,500,501,504,505,508],{},"Boosting 的概念可以用一個簡單的比喻理解：假設你有一群判斷能力普通的人，每個人只能做出 ",[450,502,503],{},"還不錯但不完美的判斷","。如果讓這些人 ",[450,506,507],{},"依序修正前一個人的錯誤","，最後就可以得到一個非常準確的決策。",[363,510,511,512,484],{},"在機器學習中，這些「人」其實就是 ",[450,513,514],{},"decision tree（決策樹）",[363,516,517],{},"模型的訓練流程大致如下：",[519,520,521,525,528,531,534],"ol",{},[522,523,524],"li",{},"建立第一棵樹，做出初步預測",[522,526,527],{},"計算預測錯誤（residual）",[522,529,530],{},"建立新的樹來修正這些錯誤",[522,532,533],{},"重複這個過程很多次",[522,535,536],{},"最後把所有樹的結果加總",[363,538,539],{},"簡單來說：",[541,542,543],"blockquote",{},[363,544,545,546,484],{},"LightGBM 其實不是一棵樹，而是 ",[450,547,548],{},"很多棵樹的組合",[486,550],{},[358,552,554],{"id":553},"lightgbm-的模型結構","LightGBM 的模型結構",[363,556,557],{},"LightGBM 最終的模型看起來像這樣：",[559,560,566],"pre",{"className":561,"code":563,"language":564,"meta":565},[562],"language-text","Prediction = Tree1 + Tree2 + Tree3 + ... + TreeN\n","text","",[455,567,563],{"__ignoreMap":565},[363,569,570,571,484],{},"每一棵樹都負責 ",[450,572,573],{},"修正前一輪的錯誤",[363,575,368],{},[370,577,578,588],{},[373,579,580],{},[376,581,582,585],{},[379,583,584],{},"Tree",[379,586,587],{},"功能",[396,589,590,598,606],{},[376,591,592,595],{},[401,593,594],{},"Tree1",[401,596,597],{},"建立基礎預測",[376,599,600,603],{},[401,601,602],{},"Tree2",[401,604,605],{},"修正第一棵樹的錯誤",[376,607,608,611],{},[401,609,610],{},"Tree3",[401,612,613],{},"再修正剩下的誤差",[363,615,616],{},"隨著樹越來越多，模型的預測能力也會越來越強。",[486,618],{},[358,620,622],{"id":621},"lightgbm-與一般-decision-tree-的差別","LightGBM 與一般 Decision Tree 的差別",[363,624,625,626,629],{},"如果只使用 ",[450,627,628],{},"單一 Decision Tree","，模型很容易出現兩個問題：",[519,631,632,637],{},[522,633,634],{},[450,635,636],{},"過度簡化（underfitting）",[522,638,639],{},[450,640,641],{},"過度擬合（overfitting）",[363,643,644],{},"Boosting 的做法是：",[541,646,647],{},[363,648,649],{},"用很多棵「簡單的樹」組合成一個「強大的模型」。",[363,651,652,653,656],{},"這也是為什麼像 ",[450,654,655],{},"LightGBM、XGBoost、CatBoost"," 這類模型常常在 Kaggle 競賽或實務專案中表現很好。",[486,658],{},[358,660,662],{"id":661},"lightgbm-為什麼這麼快","LightGBM 為什麼這麼快？",[363,664,665],{},"LightGBM 相比於其他 Gradient Boosting 模型，有幾個非常重要的設計。",[667,668,670],"h3",{"id":669},"histogram-based-learning","Histogram-based learning",[363,672,673],{},"一般決策樹在切分資料時，需要嘗試很多可能的切分點。如果資料很多，這個過程會非常耗時。",[363,675,676,677,484],{},"LightGBM 的做法是先把數值 ",[450,678,679],{},"離散化成 histogram（直方圖）",[363,681,368],{},[559,683,686],{"className":684,"code":685,"language":564,"meta":565},[562],"age: 18, 19, 20, 21, 22\n",[455,687,685],{"__ignoreMap":565},[363,689,690],{},"可能會被分成：",[559,692,695],{"className":693,"code":694,"language":564,"meta":565},[562],"bin1: 18–20\nbin2: 21–23\n",[455,696,694],{"__ignoreMap":565},[363,698,699,700,703],{},"這樣在尋找最佳切分點時，只需要比較 ",[450,701,702],{},"bin","，速度就會快很多。",[667,705,707],{"id":706},"leaf-wise-tree-growth","Leaf-wise Tree Growth",[363,709,710,711,484],{},"另一個重要的設計是 ",[450,712,713],{},"leaf-wise growth（葉節點成長）",[363,715,716,717,720,721,484],{},"傳統 decision tree 通常是 ",[450,718,719],{},"level-wise","，每一層同時擴展；但 LightGBM 每次都選擇 ",[450,722,723],{},"最能降低誤差的葉節點繼續分裂",[363,725,726],{},"這樣的優點是：",[728,729,730,733],"ul",{},[522,731,732],{},"能更快降低 loss",[522,734,735],{},"通常得到更好的模型",[363,737,738,739,742,743,746,747,484],{},"但缺點是如果不控制，可能會 ",[450,740,741],{},"過度擬合","，因此通常會設定 ",[455,744,745],{},"max_depth"," 或 ",[455,748,749],{},"num_leaves",[486,751],{},[358,753,755],{"id":754},"一個簡單的-python-範例","一個簡單的 Python 範例",[363,757,758],{},"下面是一個使用 LightGBM 進行分類的簡單例子。",[559,760,764],{"className":761,"code":762,"language":763,"meta":565,"style":565},"language-python shiki shiki-themes github-dark","import lightgbm as lgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score\nimport pandas as pd\n\n# 假設有一個資料集\ndf = pd.read_csv(\"data.csv\")\nX = df.drop(columns=[\"fraud\"])\ny = df[\"fraud\"]\n\nX_train, X_valid, y_train, y_valid = train_test_split(\n    X, y, test_size=0.2, random_state=42\n)\n\nmodel = lgb.LGBMClassifier(\n    n_estimators=200,\n    learning_rate=0.05,\n    max_depth=6\n)\n\nmodel.fit(X_train, y_train)\npred = model.predict_proba(X_valid)[:, 1]\nprint(\"ROC-AUC:\", roc_auc_score(y_valid, pred))\n","python",[455,765,766,785,799,812,825,832,839,858,884,900,905,916,942,947,952,963,977,990,1001,1006,1011,1017,1032],{"__ignoreMap":565},[767,768,771,775,779,782],"span",{"class":769,"line":770},"line",1,[767,772,774],{"class":773},"snl16","import",[767,776,778],{"class":777},"s95oV"," lightgbm ",[767,780,781],{"class":773},"as",[767,783,784],{"class":777}," lgb\n",[767,786,788,791,794,796],{"class":769,"line":787},2,[767,789,790],{"class":773},"from",[767,792,793],{"class":777}," sklearn.model_selection ",[767,795,774],{"class":773},[767,797,798],{"class":777}," train_test_split\n",[767,800,802,804,807,809],{"class":769,"line":801},3,[767,803,790],{"class":773},[767,805,806],{"class":777}," sklearn.metrics ",[767,808,774],{"class":773},[767,810,811],{"class":777}," roc_auc_score\n",[767,813,815,817,820,822],{"class":769,"line":814},4,[767,816,774],{"class":773},[767,818,819],{"class":777}," pandas ",[767,821,781],{"class":773},[767,823,824],{"class":777}," pd\n",[767,826,828],{"class":769,"line":827},5,[767,829,831],{"emptyLinePlaceholder":830},true,"\n",[767,833,835],{"class":769,"line":834},6,[767,836,838],{"class":837},"sAwPA","# 假設有一個資料集\n",[767,840,842,845,848,851,855],{"class":769,"line":841},7,[767,843,844],{"class":777},"df ",[767,846,847],{"class":773},"=",[767,849,850],{"class":777}," pd.read_csv(",[767,852,854],{"class":853},"sU2Wk","\"data.csv\"",[767,856,857],{"class":777},")\n",[767,859,861,864,866,869,873,875,878,881],{"class":769,"line":860},8,[767,862,863],{"class":777},"X ",[767,865,847],{"class":773},[767,867,868],{"class":777}," df.drop(",[767,870,872],{"class":871},"s9osk","columns",[767,874,847],{"class":773},[767,876,877],{"class":777},"[",[767,879,880],{"class":853},"\"fraud\"",[767,882,883],{"class":777},"])\n",[767,885,887,890,892,895,897],{"class":769,"line":886},9,[767,888,889],{"class":777},"y ",[767,891,847],{"class":773},[767,893,894],{"class":777}," df[",[767,896,880],{"class":853},[767,898,899],{"class":777},"]\n",[767,901,903],{"class":769,"line":902},10,[767,904,831],{"emptyLinePlaceholder":830},[767,906,908,911,913],{"class":769,"line":907},11,[767,909,910],{"class":777},"X_train, X_valid, y_train, y_valid ",[767,912,847],{"class":773},[767,914,915],{"class":777}," train_test_split(\n",[767,917,919,922,925,927,931,934,937,939],{"class":769,"line":918},12,[767,920,921],{"class":777},"    X, y, ",[767,923,924],{"class":871},"test_size",[767,926,847],{"class":773},[767,928,930],{"class":929},"sDLfK","0.2",[767,932,933],{"class":777},", ",[767,935,936],{"class":871},"random_state",[767,938,847],{"class":773},[767,940,941],{"class":929},"42\n",[767,943,945],{"class":769,"line":944},13,[767,946,857],{"class":777},[767,948,950],{"class":769,"line":949},14,[767,951,831],{"emptyLinePlaceholder":830},[767,953,955,958,960],{"class":769,"line":954},15,[767,956,957],{"class":777},"model ",[767,959,847],{"class":773},[767,961,962],{"class":777}," lgb.LGBMClassifier(\n",[767,964,966,969,971,974],{"class":769,"line":965},16,[767,967,968],{"class":871},"    n_estimators",[767,970,847],{"class":773},[767,972,973],{"class":929},"200",[767,975,976],{"class":777},",\n",[767,978,980,983,985,988],{"class":769,"line":979},17,[767,981,982],{"class":871},"    learning_rate",[767,984,847],{"class":773},[767,986,987],{"class":929},"0.05",[767,989,976],{"class":777},[767,991,993,996,998],{"class":769,"line":992},18,[767,994,995],{"class":871},"    max_depth",[767,997,847],{"class":773},[767,999,1000],{"class":929},"6\n",[767,1002,1004],{"class":769,"line":1003},19,[767,1005,857],{"class":777},[767,1007,1009],{"class":769,"line":1008},20,[767,1010,831],{"emptyLinePlaceholder":830},[767,1012,1014],{"class":769,"line":1013},21,[767,1015,1016],{"class":777},"model.fit(X_train, y_train)\n",[767,1018,1020,1023,1025,1028,1030],{"class":769,"line":1019},22,[767,1021,1022],{"class":777},"pred ",[767,1024,847],{"class":773},[767,1026,1027],{"class":777}," model.predict_proba(X_valid)[:, ",[767,1029,403],{"class":929},[767,1031,899],{"class":777},[767,1033,1035,1038,1041,1044],{"class":769,"line":1034},23,[767,1036,1037],{"class":929},"print",[767,1039,1040],{"class":777},"(",[767,1042,1043],{"class":853},"\"ROC-AUC:\"",[767,1045,1046],{"class":777},", roc_auc_score(y_valid, pred))\n",[363,1048,1049],{},"這段程式碼的流程是：",[519,1051,1052,1055,1058,1061,1064],{},[522,1053,1054],{},"載入資料",[522,1056,1057],{},"切分 train / validation",[522,1059,1060],{},"建立 LightGBM 模型",[522,1062,1063],{},"訓練模型",[522,1065,1066],{},"使用 ROC-AUC 評估結果",[486,1068],{},[358,1070,1072],{"id":1071},"lightgbm-常見的應用場景","LightGBM 常見的應用場景",[363,1074,1075,1076,1079],{},"LightGBM 特別適合 ",[450,1077,1078],{},"tabular data"," 的問題，例如：",[728,1081,1082,1085,1088,1091,1094],{},[522,1083,1084],{},"信用風險評估",[522,1086,1087],{},"詐欺偵測",[522,1089,1090],{},"廣告點擊率預測",[522,1092,1093],{},"推薦系統",[522,1095,1096],{},"金融交易分析",[363,1098,1099,1100,1103],{},"在很多實務專案中，LightGBM 往往會成為 ",[450,1101,1102],{},"baseline model","，因為它具有：",[728,1105,1106,1109,1112],{},[522,1107,1108],{},"訓練速度快",[522,1110,1111],{},"效能強",[522,1113,1114],{},"容易調參",[363,1116,1117],{},"這也是為什麼在資料科學競賽（例如 Kaggle）中，LightGBM 的使用率非常高。",[486,1119],{},[358,1121,1122],{"id":1122},"總結",[363,1124,1125,1126,1129,1130,1132,1133,1136],{},"LightGBM 是一種基於 ",[450,1127,1128],{},"Gradient Boosting Decision Tree（GBDT）"," 的機器學習模型，透過多棵決策樹逐步修正錯誤，建立出強大的預測能力。相比傳統的 boosting 方法，LightGBM 透過 ",[450,1131,670],{}," 和 ",[450,1134,1135],{},"Leaf-wise tree growth"," 等設計，大幅提升了訓練速度與模型效率。",[363,1138,1139,1140,1142],{},"在處理 ",[450,1141,1078],{}," 的問題時，LightGBM 往往能提供非常優秀的效果，因此也成為現代資料科學與機器學習專案中最常見的模型之一。",[486,1144],{},[358,1146,1147],{"id":1147},"參考資料",[519,1149,1150,1157,1166],{},[522,1151,1152,1153],{},"Ke, G. et al. (2017). ",[1154,1155,1156],"em",{},"LightGBM: A Highly Efficient Gradient Boosting Decision Tree.",[522,1158,1159,1160],{},"LightGBM Official Documentation: ",[1161,1162,1163],"a",{"href":1163,"rel":1164},"https://lightgbm.readthedocs.io",[1165],"nofollow",[522,1167,1168,1169],{},"Chen, T. & Guestrin, C. (2016). ",[1154,1170,1171],{},"XGBoost: A Scalable Tree Boosting System.",[1173,1174,1175],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":565,"searchDepth":787,"depth":787,"links":1177},[1178,1179,1180,1181,1182,1186,1187,1188,1189],{"id":360,"depth":787,"text":361},{"id":490,"depth":787,"text":491},{"id":553,"depth":787,"text":554},{"id":621,"depth":787,"text":622},{"id":661,"depth":787,"text":662,"children":1183},[1184,1185],{"id":669,"depth":801,"text":670},{"id":706,"depth":801,"text":707},{"id":754,"depth":787,"text":755},{"id":1071,"depth":787,"text":1072},{"id":1122,"depth":787,"text":1122},{"id":1147,"depth":787,"text":1147},"介紹 LightGBM 的核心概念、運作方式與實際應用，幫助初學者理解為什麼它在表格資料（tabular data）上表現如此優秀。","md",null,{"tags":1194,"category":86,"date":1198},[1195,1196,1197,1078],"machine learning","lightgbm","gradient boosting","2026-03-08",{"title":101,"description":1190},"XtZvRjN4svBuuoeazZrKS-aeV1BFQgMsRMeBbvKNUGE",[1202,1204],{"title":97,"path":98,"stem":99,"description":1203,"children":-1},"深入理解 Decision Tree 與 GBDT 在表格資料上的優勢，解析為何在多數資料科學實務中，tree-based model 往往比深度學習模型表現更好。",{"title":105,"path":106,"stem":107,"description":1205,"children":-1},"從直觀概念到數學公式，深入理解 Logistic Regression 的原理，並透過實際案例了解它在分類問題中的應用。",1776690841869]