This report explores the Iris dataset and outlines plans for building a prediction algorithm and Shiny app.
Mathematical Explanation: We have a multi-class classification problem. Given a feature vector: X = [x₁, x₂, …, xₙ] where xᵢ represents flower measurements (e.g., sepal length, petal width), we aim to predict the species label y ∈ {setosa, versicolor, virginica}.
We will use Random Forest, which builds multiple decision trees and outputs the most frequent class. The error function is: Error = (1/N) Σ I(ŷᵢ ≠ yᵢ) where ŷᵢ is the predicted label and yᵢ is the true label.
data(iris)
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
ggplot(iris, aes(x = Species)) +
geom_bar(fill = "steelblue") +
theme_minimal() +
labs(title = "Species Frequency", x = "Species", y = "Count")
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(fill = "lightgreen") +
theme_minimal() +
labs(title = "Sepal Length by Species", x = "Species", y = "Sepal Length")
We plan to: - Train a Random Forest model to predict species based on flower measurements. - Create a Shiny app with: - File upload for user data - Real-time prediction output - Interactive plots
library(shiny)
ui <- fluidPage(
titlePanel("Iris Species Prediction App"),
sidebarLayout(
sidebarPanel(
fileInput("file", "Upload Iris Data"),
actionButton("predict", "Predict Species")
),
mainPanel(
textOutput("prediction"),
plotOutput("plot")
)
)
)
server <- function(input, output) {
output$prediction <- renderText({"Prediction will appear here"})
output$plot <- renderPlot({hist(rnorm(100))})
}
shinyApp(ui = ui, server = server)