kNN算法及其python&R实现
2024-09-08 05:33:40
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近邻学习
最新文章
- iSAC测试报告
- 将inline、template声明和定义在头文件中
- Cloud Insight 仪表盘上线 | 全面监控 Redis
- Oracle中批量插入
- Jq超链接提示
- textarea 输入框限制字数
- UI控件库
- 怎样使用万用表来测试板子上的TX和RX引脚
- Navicat连接不上MySQL
- WordPress常用插件
- python中全局变量和局部变量的一个小坑
- g4e基础篇#2 Git分布式版本控制系统的优势
- Dockerfile Volume指令与docker -v的区别
- MySql在Mac上的安装与配置详解
- Linux安装rar
- 对int数组排序
- php get接口,并在浏览器中以json格式返回查找到的数据
- CF949D Curfew
- Python记录8:函数的嵌套
- 敏捷项目管理架构(APMF)