-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdemo code.R
More file actions
131 lines (116 loc) · 4.38 KB
/
Copy pathdemo code.R
File metadata and controls
131 lines (116 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Linear Regression
library(caTools)
sales <- read.csv("revenue.csv")
# Split into training and testing data
set.seed(2)
# SplitRatio means the percentage of data for training
split <- caTools::sample.split(sales$Profit, SplitRatio = 0.7)
train <- sales[split, ]
test <- sales[!split, ]
# Linear regression model construction
linear_model <- lm(Profit ~., data = train)
# Prediction from linear regression model on testing set
prediction_test <- predict(linear_model, test)
# Logistic Regression
# for data splitting into training and testing
library(caTools)
# Dataset for logistic regression
library(mlbench)
data(PimaIndiansDiabetes)
log_df <- PimaIndiansDiabetes
# Splitting data
split <- caTools::sample.split(log_df$diabetes, SplitRatio = 0.7)
train <- log_df[split, ]
test <- log_df[!split, ]
# Data pre-processing - logistic regression takes in factor type variables
train$diabetes <- as.factor(train$diabetes)
# Logistic model construction
log_model <- glm(diabetes ~., data = train, family = "binomial")
# Prediction from logistic regression model on testing set
prediction_test <- predict(log_model, test, type = "response")
# confusion matrix to check prediction accuracy
table(Actual_value = test$diabetes, Predicted_value = pred > 0.5)
# Decision Tree
# For constructing decision tree
library(FSelector)
library(rpart)
# For test train set split
library(caret)
library(dplyr)
# For plotting the decision tree
library(rpart.plot)
library(data.tree)
path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/titanic_data.csv'
titanic <-read.csv(path)
# Data cleaning
titanic <- select(titanic, survived, pclass, sex, age)
titanic <- mutate(titanic, survived = factor(survived), age = as.numeric(age))
# Data splitting
set.seed(123)
sample = sample.split(titanic$survived, SplitRatio = 0.7)
train <- titanic[sample, ]
test <- titanic[!sample, ]
# Construct decision tree model
tree <- rpart(survived ~., data = train)
tree.survived.pred <- predict(tree, test, type = "class")
# Evaluate model accuracy
confusionMatrix(tree.survived.pred, test$survived)
# Visualize decision tree
prp(tree)
# Random Forest
library(randomForest)
winequality <- read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv",
sep = ";")
# Data manipulation
winequality <- mutate(winequality, quality = as.factor(quality))
# Data split
sample <- sample.split(winequality$quality, SplitRatio = 0.7)
train <- winequality[sample, ]
test <- winequality[!sample, ]
# Construct random forest
rf <- randomForest(quality ~., data = train,
mtry = floor(sqrt(ncol(winequality))),
ntree = 2001, importance = TRUE)
# randomForest function arguments:
# mtry: the number of variables randomly sampled as candidate for each decision tree
# ntree: the number of decision trees that will be constructed, usually set the ntree argument to an odd number.
# importance: TRUE or FALSE argument, defines whether or not to check the correlations between variables
# Checking for accuracy
sum(result[, 1] == result[, 2])/nrow(result)
# Support Vector Machine
library(e1071)
data(PimaIndiansDiabetes)
df <- PimaIndiansDiabetes
df <- df[, c("glucose", "insulin", "diabetes")]
# Splitting data
split <- caTools::sample.split(df$diabetes, SplitRatio = 0.7)
train <- df[split, ]
test <- df[!split, ]
# Data pre-processing
train$diabetes <- as.character(train$diabetes)
train$diabetes <- ifelse(train$diabetes == "pos", +1, -1)
# SVM model construction
svm_model <- svm(diabetes ~., data = train,
type = "C-classification", kernel = "linear",
scale = FALSE)
# Prediction on testing set
pred <- predict(svm_model, test)
test$diabetes <- ifelse(test$diabetes == "pos", +1, -1)
# Checking prediction accuracy
table(Actual_value = test$diabetes, Predicted_value = pred)
# Clustering
data("iris")
# Preliminary view of potential clusters
plot(iris$Sepal.Length, iris$Sepal.Width, col = iris$Species,
xlab = "Sepal Width", ylab = "Sepal Length",
main = "Sepal Width vs. Length By Species", pch = 16)
legend("topright", inset = 0.01,
legend = c("setosa", "versicolor", "virginica"),
col = 1:3, title = "Species", pch = 16)
# Scaling
scaled_iris <- scale(iris[, -5])
# Calculate Euclidean distance
distance <- dist(scaled_iris)
# Dendrogram
dendrogram <- hclust(distance, method = "average")
plot(dendrogram, labels = iris$Species, hang = -1)