机器学习与R语言:kNN

#----------------------------------------
# 功能描述:演示kNN建模过程
# 数据集:威斯康星乳腺癌诊断
#
#----------------------------------------

#第一步:收集数据
# import the CSV file
wbcd <- read.csv("/Users/chenyangang/R语言/data/wisc_bc_data.csv", stringsAsFactors = FALSE)

#熟悉数据
str(wbcd)

#radius 半径
#texture 质地
#perimeter 周长
#area 面积
#smoothness 光滑度
#compactness 致密度
#concavity 凹度
#points 凹点
#symmetry 对称性
#dimension 分型维数

#第二步:探索和准备数据
# 删除 id 变量
wbcd <- wbcd[-1]

# 目标数据的分类
table(wbcd$diagnosis)

# 分类器要求目标属性为因子类型,所以需要进行转化
wbcd$diagnosis <- factor(wbcd$diagnosis, levels = c("B", "M"),
labels = c("Benign", "Malignant"))

# 目标变量的占比
round(prop.table(table(wbcd$diagnosis)) * 100, digits = 1)

# 五数分析:分析半径、面积、光滑度,目的:看变量间的差异,是否需要进行数据的标准化
summary(wbcd[c("radius_mean", "area_mean", "smoothness_mean")])

# 2.1 最小-最大数据标注化,用于数值型变量
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}

# 测试标准化函数
normalize(c(1, 2, 3, 4, 5))
normalize(c(10, 20, 30, 40, 50))

# 标准化数据
wbcd_n <- as.data.frame(lapply(wbcd[2:31], normalize))

#2.2 创建训练集和测试数据
wbcd_train <- wbcd_n[1:469, ]
wbcd_test <- wbcd_n[470:569, ]

# 分别为训练集和测试集提取目标变量
wbcd_train_labels <- wbcd[1:469, 1]
wbcd_test_labels <- wbcd[470:569, 1]

#第三步:基于数据训练模型
#--------------------------------------------
# 创建分类器:
# p <- knn(train, test, class, k)
# train: 训练集,数值型
# test: 测试集
# class:分类的因子向量
# k : 一个整数
# 该函数返回一个因子向量,该向量含有测试数据框中每一行的预测分类
#---------------------------------------------
# 加载class包
library(class)

#建模
wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test,
cl = wbcd_train_labels, k=21)

## 第四步: 评估模型性能
# 加载 "gmodels" 包
library(gmodels)

# 交叉表分析
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred,
prop.chisq=FALSE)

#有两个被错误分类

## 第五步:提供模型的性能

# 5.1 使用scale() 函数进行 z-score 标准化数据
wbcd_z <- as.data.frame(scale(wbcd[-1]))

# 查看标准化后的结果
summary(wbcd_z$area_mean)

# 创建数据集和测试集
wbcd_train <- wbcd_z[1:469, ]
wbcd_test <- wbcd_z[470:569, ]

# 重新进行分类
wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test,
cl = wbcd_train_labels, k=21)

# 交叉表分析
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred,
prop.chisq=FALSE)

#重新分类后,并没有带来提升,出现了下降,方法可供参考,利用数据的标准化

# 可以对不用的k值进行尝试
wbcd_train <- wbcd_n[1:469, ]
wbcd_test <- wbcd_n[470:569, ]

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=1)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=5)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=11)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=15)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=21)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl = wbcd_train_labels, k=27)
CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)

  

时间: 2024-10-09 06:23:17

机器学习与R语言:kNN的相关文章

机器学习与R语言

此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关的包实现,案例十分详实,理论与实例结合. 目录 第一章 机器学习简介 第二章 数据的管理和理解 第三章 懒惰学习--使用近邻分类 第四章 概率学习--朴素贝叶斯分类 第五章 分而治之--应用决策树和规则进行分类 第六章 预测数值型数据--回归方法 第七章 黑箱方法--神经网络和支持向量机 第八章 探

机器学习:R语言中如何使用最小二乘法

详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同上一篇博客)(是不是很简单????) > x<-c(6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2) > y<-c(5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3) > lsfit(x,y

机器学习与R语言:NB

#---------------------------------------- # 功能描述:演示NB建模过程 # 数据集:SMS文本信息 # tm包:维也纳财经大学提供 #---------------------------------------- #第一步:收集数据 # import the CSV file sms_raw <- read.csv("/Users/chenyangang/R语言/data/sms_spam.csv", stringsAsFactors

机器学习与R语言:C5.0

#---------------------------------------- # 功能描述:演示C50建模过程 # 数据集:汉堡大学信贷模型,信贷数据 # #---------------------------------------- #第一步:收集数据 # import the CSV file credit <- read.csv("/Users/chenyangang/R语言/data/credit.csv", stringsAsFactors = TRUE) #

机器学习与R语言——基本语法

一.注释 1.选中要注释的内容,快捷键Ctrl+Shift+C(取消注释方法相同) 2.在需注释内容前输入# 1 #需注释的内容 3.利用if语句,将判断条件设置为false则可跳过if语句中的内容,相当于实现了内容的注释 1 if(false) 2 { 3 x = 5 4 y <- 10 5 } 二.工作成果保存.数据删除及加载 1..首先创建两文件夹,分别命名为Rsourse和Data,用于保存工程文件(.r)和数据文件(.rda) 2.相关函数: (1).获取当前工作路径:getwd()

简单线性回归问题的优化(SGD)R语言

本编博客继续分享简单的机器学习的R语言实现. 今天是关于简单的线性回归方程问题的优化问题 常用方法,我们会考虑随机梯度递降,好处是,我们不需要遍历数据集中的所有元素,这样可以大幅度的减少运算量. 具体的算法参考下面: 首先我们先定义我们需要的参数的Notation 上述算法中,为了避免过拟合,我们采用了L2的正则化,在更新步骤中,我们会发现,这个正则项目,对参数更新的影响 下面是代码部分: ## Load Library library(ggplot2) library(reshape2) li

R语言使用机器学习算法预测股票市场

quantmod 介绍 quantmod 是一个非常强大的金融分析报, 包含数据抓取,清洗,建模等等功能. 1. 获取数据 getSymbols 默认是数据源是yahoo 获取上交所股票为 getSymbols("600030.ss"), 深交所为 getSymbols("000002.sz").  ss表示上交所, sz表示深交所 2. 重命名函数 setSymbolLookup 3. 股息函数 getDividends 4. 除息调整函数 adjustOHLC

机器学习算法的R语言实现(二):决策树

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖