iris数据集,这一教科书级别的数据,分类前不需要做任何数据预处理什么的,相当的理想!但请注意你自己的数据99%的可能需要做预处理。

下面分别用R语言和Python来实现iris数据集的分类:

R语言:

library(class)
data(iris)

#观察数据
str(iris) #查看iris数据结构
head(iris) #前5行
table(iris$Species) #样本类别频数下·

#采样(对于此分类问题,更加建议分层抽样)
samples <- sample(nrow(iris),size = round(nrow(iris)*0.8),replace = F)

iris_train <- iris[samples,]
iris_train <- iris_train[,1:4]

iris_test <- iris[-samples,]
iris_test <- iris_test[,1:4]

iris_train_labels <- iris[samples,5]
iris_test_labels <- iris[-samples,5]

iris_test_pred <- knn(train = iris_train,test = iris_test,cl = iris_train_labels,k=21)

TF <- table(iris_test_labels,iris_test_pred)
accuracy <- (sum(diag(TF))/sum(TF))
cat("正确率",accuracy)

 python语言:

# -*- coding: utf-8 -*-
'''
py3
KNeighborsClassifier(n_neighbors=5, weights='uniform',
                      algorithm='auto', leaf_size=30,
                      p=2, metric='minkowski',
                      metric_params=None, n_jobs=1, **kwargs)
n_neighbors: 默认值为5,表示查询k个最近邻的数目
algorithm:   {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},指定用于计算最近邻的算法,auto表示试图采用最适合的算法计算最近邻
leaf_size:   传递给‘ball_tree’或‘kd_tree’的叶子大小
metric:      用于树的距离度量。默认'minkowski与P = 2(即欧氏度量)
n_jobs:      并行工作的数量,如果设为-1,则作业的数量被设置为CPU内核的数量
查看官方api:http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier
'''

from sklearn import neighbors
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import cross_validation

iris = datasets.load_iris() #注意传入数据的数据结构和数据类型,方便比葫芦画瓢
data = iris.data
target = iris.target
#下面是随机划分训练集和测试集,分类算法更建议用分层抽样
x_train,x_test, y_train,y_test = train_test_split(data,target,test_size=0.2)
knn = neighbors.KNeighborsClassifier() #取得knn分类器
knn.fit(x_train,y_train) #导入数据进行训练   

res = knn.predict(x_test)
print(res) #查看预测结果
print(iris.target_names[res]) #查看预测结果对应的标签

score = knn.score(data, target) #模型正确率
print('Accuracy:',score)

sample_data = [[ 6.5,  3. ,  5.2,  2. ],] #预测新数据,注意这是个多维数组
print(knn.predict(sample_data))
print(knn.predict_proba(sample_data)) #返回概率数组

#下面是交叉验证,判断此模型稳定性(计算平均正确率)
cross_validation.cross_val_score(
    knn,
    data,
    target,cv=5
)

参考文献:

1.《机器学习实战》
2.《机器学习与R语言》
3.《机器学习》周志华 第10章 10.1 k近邻学习
 

最新文章

  1. iSAC测试报告
  2. 将inline、template声明和定义在头文件中
  3. Cloud Insight 仪表盘上线 | 全面监控 Redis
  4. Oracle中批量插入
  5. Jq超链接提示
  6. textarea 输入框限制字数
  7. UI控件库
  8. 怎样使用万用表来测试板子上的TX和RX引脚
  9. Navicat连接不上MySQL
  10. WordPress常用插件
  11. python中全局变量和局部变量的一个小坑
  12. g4e基础篇#2 Git分布式版本控制系统的优势
  13. Dockerfile Volume指令与docker -v的区别
  14. MySql在Mac上的安装与配置详解
  15. Linux安装rar
  16. 对int数组排序
  17. php get接口,并在浏览器中以json格式返回查找到的数据
  18. CF949D Curfew
  19. Python记录8:函数的嵌套
  20. 敏捷项目管理架构(APMF)

热门文章

  1. 怎么运行Typescript
  2. 基于RxJava2+Retrofit2精心打造的Android基础框架
  3. java中不能用小数点(.)来做分隔符
  4. MongoDB 的聚集操作
  5. 基于多输出有序回归的年龄识别(CVPR_2016)
  6. Spring4整合Hibernate5时不能自动生成表结构
  7. entity framework core 调用存储过程和方法
  8. [转载]Axis2 and CXF的比较
  9. df 命令
  10. bzoj3531【SDOI2014】旅行