您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页R语言-机器学习概述

R语言-机器学习概述

来源:步遥情感网
####5.1 机器学习概述
#1.准备并读入数据
#2.数据预处理
#3.模型训练
#4.模型预测及评价
##### 5.1 机器学习概述 #####
### 载入数据和相应包 ###
# 清空工作目录
rm(list = ls())
# 加载机器学习包
# install.packages(caret) #caret包是为了解决预测问题的综合机器学习工具包
library(caret)
# 加载数据
dat0 = read.csv('相亲数据.csv', fileEncoding = "UTF-8")
head(dat0)
### 1.数据预处理及数据分割 ###
## (1) 缺失值处理 ##
nrow(dat0)
dat = na.omit(dat0)
nrow(dat)
## (2) 将定性变量转换为因子性变量 ##
# 转换数据类型
dat$决定 = factor(dat$决定, levels = c(0, 1), labels = c("拒绝", "接收"))
dat$性别 = factor(dat$性别, levels = c(0, 1), labels = c("女", "男"))
dat$种族 = factor(dat$种族, levels = c(1, 2, 3, 4, 5, 6), labels = c("非洲裔", "欧洲裔", "拉丁裔", "亚裔", "印第安土著", "其他"))
dat$从事领域 = factor(dat$从事领域, levels = 1:18, 
                  labels = c("法律", "数学", "社会科学或心理学",
                             "医学或药物学或生物技术", "工程学", "写作或新闻",
                             "历史或宗教或哲学", "商业或经济或金融", "教育或学术",
                             "生物科学或化学或物理", "社会工作", "大学在读或未择方向",
                             "政治学或国际事务", "电影", "艺术管理",
                             "语言", "建筑学", "其他"))
dat$对方决定 = factor(dat$对方决定, levels = c(0, 1), labels = c("拒绝", "接收"))
dat$对方种族 = factor(dat$对方种族, levels = c(1, 2, 3, 4, 5,6), labels = c("非洲裔", "欧洲裔", "拉丁裔", "亚裔", "印第安土著", "其他"))
dat$是否同一种族 = factor(dat$是否同一种族, levels = c(0, 1), labels = c("非同一种族", "同一种族"))
## (3) 数据划分为训练集和测试集 ##
# 设置随机种子
set.seed(1234)
# 将数据集的80%划分为训练集,20%划分为测试集
trainIndex = createDataPartition(dat$决定, p = .8, 
                                 list = FALSE, 
                                 times = 1)
createDataPartition()
# createDataPartition会自动从y的各个level随机取出等比例的数据来,组成训练集,可理解为分层抽样;
datTrain = dat[trainIndex, ]
# 训练集
datTest = dat[-trainIndex, ]
# 测试集
table(dat$决定) / nrow(dat)  # 全集上因变量各个水平的比例
##  
##      拒绝     接收 
##  0.560021 0.439979
table(datTrain$决定) / nrow(datTrain)  # 训练集上因变量各个水平的比例
##  
##       拒绝      接收 
##  0.5599476 0.4400524
table(datTest$决定) / nrow(datTest)  # 测试集上因变量各个水平的比例
##  
##       拒绝      接收 
##  0.5603147 0.4396853
## (4) 标准化处理 ##
preProcValues = preProcess(datTrain, method = c("center", "scale"))
trainTransformed = predict(preProcValues, datTrain)
testTransformed = predict(preProcValues, datTest)
# 利用训练集的均值和方差对测试集进行标准化
### 2.变量选择 ###
rfe()#特征选择中的封装法
## 封装法 rfe: Recursive feature selection ##
subsets = c(2, 5, 10, 15, 20)
rfecontrol()#用于输入目标函数和抽样方法
# 要选择的变量个数
ctrl = rfeControl(functions = rfFuncs, method = "cv")
# 首先定义控制参数,functions是确定用什么样的模型进行自变量排序,本例选择的模型是随机森林
# 根据目标函数(通常是预测效果评分),每次选择若干特征。
# method是确定用什么样的抽样方法,本例使用cv,即交叉检验
x = trainTransformed [, -which( colnames(trainTransformed ) %in% "决定")]
y = trainTransformed [, "决定"]
Profile = rfe(x, y, sizes = subsets, rfeControl = ctrl)
Profile$optVariables  # 筛选出15个变量
### 3.模型训练及调参 ###
dat.train = trainTransformed[, c(Profile$optVariables, "决定")]
dat.test = testTransformed[, c(Profile$optVariables, "决定")]
## 随机森林 ##
set.seed(1234)
gbmFit1 = train(决定 ~., data = dat.train, method = "rf")
# 用于训练模型
importance = varImp(gbmFit1, scale = FALSE)
# 得到各个变量的重要性
plot(importance, xlab = "重要性")
### 4.模型预测及评价 ###
data.predict = predict(gbmFit1, newdata = dat.test)
confusionMatrix(data.predict, dat.test$决定)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务