R机器学习之一:kNN算法案例

来源:互联网 发布:围棋人工智能程序 编辑:程序博客网 时间:2024/06/05 20:45

kNN算法优劣

优点:
高度无偏且不需要对数据作任何假设。简单有效易于实现
缺点:
由于没有涉及抽象过程,kNN实际上并没有创建一个模型,预测时间较长

case study:检测前列腺癌

Step 1 :
100个观测10个变量,其中8个数值变量,一个类别变量,一个ID:
1,Radius
2,Texture
3,Perimeter
4,Area
5,Smoothness
6,Compactness
7,Symmetry
8,Fractal dimension

Step 2 :数据准备

setwd('D:\\f\\机器学习\\AnalyticsVidhya\\kNN in R')prc=read.csv("D:\\f\\机器学习\\AnalyticsVidhya\\kNN in R\\Prostate_Cancer.csv")> head(prc)  id diagnosis_result radius texture perimeter area smoothness compactness symmetry1  1                M     23      12       151  954      0.143       0.278    0.2422  2                B      9      13       133 1326      0.143       0.079    0.1813  3                M     21      27       130 1203      0.125       0.160    0.2074  4                M     14      16        78  386      0.070       0.284    0.2605  5                M      9      19       135 1297      0.141       0.133    0.1816  6                B     25      25        83  477      0.128       0.170    0.209  fractal_dimension1             0.0792             0.0573             0.0604             0.0975             0.0596             0.076prc=prc[-1]#ID列没有用##数据集包括被诊断为恶性和良性的病人table(prc$diagnosis_result)prc$diagnosis <- factor(prc$diagnosis_result, levels = c("B", "M"),                         labels = c("Benign", "Malignant"))round(prop.table(table(prc$diagnosis)) * 100, digits = 1) normalize <- function(x) {  return ((x - min(x)) / (max(x) - min(x))) }prc_n <- as.data.frame(lapply(prc[2:9], normalize))#对数值变量标准化prc_train <- prc_n[1:65,]prc_test <- prc_n[66:100,]prc_train_labels <- prc[1:65, 1]prc_test_labels <- prc[66:100, 1]#训练模型install.packages("class")library(class)##用knn()函数分类测试数据,k选为样本个数开方prc_test_pred <- knn(train = prc_train, test = prc_test,cl = prc_train_labels, k=10)##模型评估install.packages("gmodels")library(gmodels)CrossTable(x=prc_test_labels,y=prc_test_pred,prop.chisq = FALSE)> CrossTable(x=prc_test_labels,y=prc_test_pred,prop.chisq = FALSE)   Cell Contents|-------------------------||                       N ||           N / Row Total ||           N / Col Total ||         N / Table Total ||-------------------------|Total Observations in Table:  35                 | prc_test_pred prc_test_labels |         B |         M | Row Total | ----------------|-----------|-----------|-----------|              B |         7 |        12 |        19 |                 |     0.368 |     0.632 |     0.543 |                 |     1.000 |     0.429 |           |                 |     0.200 |     0.343 |           | ----------------|-----------|-----------|-----------|              M |         0 |        16 |        16 |                 |     0.000 |     1.000 |     0.457 |                 |     0.000 |     0.571 |           |                 |     0.000 |     0.457 |           | ----------------|-----------|-----------|-----------|   Column Total |         7 |        28 |        35 |                 |     0.200 |     0.800 |           | ----------------|-----------|-----------|-----------|#14个FP#模型准确度为(TN+TP)/35=60% 有待改善##########模型改进##尝试改变k值!!

参考文献

http://www.analyticsvidhya.com/blog/2015/08/learning-concept-knn-algorithms-programming/

0 0
原创粉丝点击