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近邻学习