R - 隨機森林:初學者指南
你好,未來的數據科學家們!今天,我們將要開始一個令人興奮的旅程,進入R語言中的隨機森林世界。別擔心如果你之前從未寫過一行代碼——我會在每一步成為你友好的導遊。到了這個教程的結尾,你將會種植屬於你自己的數字森林!我們開始吧,不是嗎?
安裝所需的R套件
在我們能夠種植我們的數字樹之前,我們需要確保我們有正確的工具。在R中,這些工具以套件的形式存在。將套件想像成裝滿特殊函數的工具箱,這些函數讓我們的生活變得更容易。
在我們的隨機森林冒險中,我們將需要兩個主要的套件:randomForest
和 caret
。我們來安裝它們!
# 安裝所需的套件
install.packages("randomForest")
install.packages("caret")
# 加載套件
library(randomForest)
library(caret)
當你運行這些行時,R會去網上為你下載這些套件。這就像在線上訂購工具,然後它們被直接送達你的數字門廊!
理解隨機森林:基礎知識
想像一下你在一個森林中迷路了,你需要找到出路。你可能會問幾個不同的人尋求方向。有些人可能會非常準確,其他人可能會相差甚遠,但如果你遵循多數人的意見,你很可能會找到正確的路徑。這基本上就是隨機森林的工作原理!
隨機森林是一種集成學習方法,它使用多個決策樹來進行預測。這就像有一個由樹專家組成的委員會對最佳決策進行投票。
隨機森林的關鍵組成部分
- 決策樹:我們森林中的個別"投票者"。
- 自舉法:每棵樹都是在數據的隨機子集上進行訓練。
- 特徵隨機性:在樹的每個分割點,只考慮隨機的特徵子集。
- 聚合:最終預測是通過聚合所有樹的預測來完成的。
創建你的第一個隨機森林
讓我們從一個使用內置的iris數據集的簡單例子開始。這個數據集包含了不同鸢尾花的測量數據。
# 加載iris數據集
data(iris)
# 設置一個種子以確保可重現性
set.seed(123)
# 創建一個隨機森林模型
rf_model <- randomForest(Species ~ ., data = iris, ntree = 500)
# 打印模型
print(rf_model)
在這段代碼中:
- 我們加載了iris數據集。
- 我們設置了一個種子以確保可重現性(這樣我們所有的人都能得到相同的"隨機"結果)。
- 我們使用
randomForest()
創建了一個隨機森林模型。Species ~ .
的部分意味著我們嘗試使用所有其他變量來預測物種。 - 我們指定
ntree = 500
,這意味著我們的森林將有500棵樹。
當你運行這段代碼時,你會看到你的隨機森林模型的摘要。這就像為你的森林拿到了一份報告卡!
使用你的隨機森林進行預測
現在有了我們的森林,讓我們用它來進行一些預測!
# 在iris數據集上進行預測
predictions <- predict(rf_model, iris)
# 創建一個混淆矩陣
confusion_matrix <- table(predictions, iris$Species)
# 打印混淆矩陣
print(confusion_matrix)
# 計算準確度
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("準確度:", round(accuracy, 4)))
這段代碼:
- 使用我們的模型在iris數據集上進行預測。
- 創建一個混淆矩陣來比較我們的預測與實際物種。
- 計算並打印模型的準確度。
混淆矩陣顯示了每個物種的預測有多少是正確的。對角線元素代表正確的預測。
特徵重要性
隨機森林的一個好處是它們可以告訴我們哪些特徵(變量)對進行預測最為重要。讓我們來看看!
# 獲取特徵重要性
importance <- importance(rf_model)
# 繪製特徵重要性
varImpPlot(rf_model, main = "特徵重要性")
這段代碼將創建一個圖表,顯示哪些特徵在進行預測中最為有用。這就像問我們的森林哪些路標在尋找路徑中最為有用!
跨集驗證:測試我們森林的力量
為了真正測試我們的森林在導航方面的能力,我們需要看看它在未曾見過的數據上的表現。我們可以使用交叉驗證來做到這一點。
# 設置交叉驗證
ctrl <- trainControl(method = "cv", number = 5)
# 使用交叉驗證訓練模型
rf_cv <- train(Species ~ ., data = iris, method = "rf", trControl = ctrl)
# 打印結果
print(rf_cv)
這段代碼:
- 設置5折交叉驗證。
- 使用這種交叉驗證訓練一個新的隨機森林模型。
- 打印結果,包括每折的準確度。
交叉驗證就像讓我們的森林導遊在不同的森林部分進行導航,以看他們在不同條件下的表現如何。
調整我們的森林:尋找完美的樹木數量
就像在真實的森林中一樣,樹木過少或過多都可能會有問題。讓我們為我們的隨機森林找到最優的樹木數量。
# 設置要嘗試的樹木數量範圍
tree_nums <- c(100, 200, 500, 1000)
# 創建一個空向量來存儲準確度
accuracies <- vector("numeric", length(tree_nums))
# 遍歷不同的樹木數量
for (i in 1:length(tree_nums)) {
rf_model <- randomForest(Species ~ ., data = iris, ntree = tree_nums[i])
predictions <- predict(rf_model, iris)
accuracies[i] <- mean(predictions == iris$Species)
}
# 創建一個結果數據框
results <- data.frame(Trees = tree_nums, Accuracy = accuracies)
# 打印結果
print(results)
# 繪製結果
plot(tree_nums, accuracies, type = "b",
xlab = "樹木數量", ylab = "準確度",
main = "準確度與樹木數量的關係")
這段代碼:
- 嘗試不同的樹木數量(100, 200, 500, 1000)。
- 為每個樹木數量計算準確度。
- 創建一個圖表,顯示準確度如何隨著樹木數量的變化。
結論
恭喜你!你剛在R中種植了你的第一個隨機森林。我們已經涵蓋了創建隨機森林、進行預測、評估重要性、執行交叉驗證以及調整我們森林的基本知識。
記住,就像真實的森林一樣,隨機森林在多樣性中繁榮。當你有各種特徵和足夠的數據時,它們工作得最好。所以,年輕的數據科學家,去種植更多的森林吧!
這裡是一個我們使用的主要方法的快速參考表:
方法 | 描述 |
---|---|
randomForest() |
創建一個隨機森林模型 |
predict() |
使用模型進行預測 |
importance() |
計算特徵重要性 |
varImpPlot() |
繪製特徵重要性 |
train() |
使用交叉驗證訓練模型 |
trainControl() |
設置交叉驗證參數 |
快樂種樹,願你的預測總是準確!
Credits: Image by storyset