R - 隨機森林:初學者指南

你好,未來的數據科學家們!今天,我們將要開始一個令人興奮的旅程,進入R語言中的隨機森林世界。別擔心如果你之前從未寫過一行代碼——我會在每一步成為你友好的導遊。到了這個教程的結尾,你將會種植屬於你自己的數字森林!我們開始吧,不是嗎?

R - Random Forest

安裝所需的R套件

在我們能夠種植我們的數字樹之前,我們需要確保我們有正確的工具。在R中,這些工具以套件的形式存在。將套件想像成裝滿特殊函數的工具箱,這些函數讓我們的生活變得更容易。

在我們的隨機森林冒險中,我們將需要兩個主要的套件:randomForestcaret。我們來安裝它們!

# 安裝所需的套件
install.packages("randomForest")
install.packages("caret")

# 加載套件
library(randomForest)
library(caret)

當你運行這些行時,R會去網上為你下載這些套件。這就像在線上訂購工具,然後它們被直接送達你的數字門廊!

理解隨機森林:基礎知識

想像一下你在一個森林中迷路了,你需要找到出路。你可能會問幾個不同的人尋求方向。有些人可能會非常準確,其他人可能會相差甚遠,但如果你遵循多數人的意見,你很可能會找到正確的路徑。這基本上就是隨機森林的工作原理!

隨機森林是一種集成學習方法,它使用多個決策樹來進行預測。這就像有一個由樹專家組成的委員會對最佳決策進行投票。

隨機森林的關鍵組成部分

  1. 決策樹:我們森林中的個別"投票者"。
  2. 自舉法:每棵樹都是在數據的隨機子集上進行訓練。
  3. 特徵隨機性:在樹的每個分割點,只考慮隨機的特徵子集。
  4. 聚合:最終預測是通過聚合所有樹的預測來完成的。

創建你的第一個隨機森林

讓我們從一個使用內置的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