机器学习--KNN的使用(Pyhton篇&R篇)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cocaine_bai/article/details/82182709

机器学习–KNN的使用

关于机器学习里面的KNN有很多文章介绍了,这里只是讲解KNN的python使用方法

我们采用的是kaggle上面的数据来学习knn。

数据传送门

这里写图片描述

上面红色框内就是我们需要的数据。
test.csv是测试数据,train.csv是训练数据, trainLabels.csv是训练数据的标签或者类别,里面的类别只有两个(0或1)。

目的:我们在已经给出的数据里面,来判断9000个数据的类别或者标签是0或1.

Python版

直接上代码:

import pandas as pd
import numpy as np
from sklearn import neighbors

kaggle_train = pd.read_csv('kaggle_train.csv', header=None)
kaggle_test = pd.read_csv('kaggle_test.csv', header=None)
kaggle_label = pd.read_csv('trainLabels.csv', header=None)
kaggle = np.array(kaggle_label)

knn = neighbors.KNeighborsClassifier(10, weights='uniform')

knn.fit(kaggle_train, kaggle.ravel())

kaggle_predict = knn.predict(kaggle_test)

li = []
for i in range(1, 9001):
    li.append(i)

df = pd.DataFrame({'Id': li, 'Solution': kaggle_predict})

df.to_csv('kaggle_predict.csv', index=False)

第一步:我们导入所需要的分析库(numpy,pandas,sklearn 里面的 neighbors);
第二步:读取我们的训练数据和测试数据;
第三步:规范我们的标签数据(由于数据不是np.array类型,会报错);
第四步:构建分类器,让机器学习(knn算法)
第五步:预测测试集的标签,并输出

这里提到一点,由于数据是进行预测,所以预测的结果只能提交kaggle来看准确率
(这里不是要提高准确率,是学习用python做knn算法)

如果已知部分结果计算得分的画用score函数:

score = knn.score(test_x, test_y, sample_weight=None)

其中第一参数为测试集的值,第二个参数为测试集的label,不需要输入预测的结果。

我们将数据传到kaggle 上面看看得分情况:

这里写图片描述

这里面的得分只有0.8882(没法和大神们比啊)。

说明我们的准确率还有待提升。

R版

kaggle_train <- read.csv('kaggle_train.csv',header = F)
kaggle_trainLabels <- read.csv('trainLabels.csv', header = F)
kaggle_test <- read.csv('kaggle_test.csv', header = F)
library(kknn)
kaggles_data <- data.frame(kaggle_train,kaggle_trainLabels)
kaggles_data$V1.1 <- as.factor(kaggles_data$V1.1)
names(kaggles_data)
kaggle_knn <- kknn(kaggles_data$V1.1~., 
                   kaggle_train, kaggle_test, k=5, distance=1, kernel='rectangular')

fit <- fitted(kaggle_knn)
write.csv(fit, 'fit.csv')

这里需要提一下:
knn算法在R中有三个包都可以用(class包的knn函数,kknn包里面kknn函数, caret包里面trainControl函数)

这里面需要注意的是要把labels的0或1变成 因子,要不然会出现预期结果

kknn函数重要的参数:
第一个formula指的是函数关系,及label和数据的关系;
第二个训练集,第三个测试集,k是指邻居的个数,distance是指距离明氏距离中的参数p的值(这里设定p=1)
kernel为加权方法(这里是rectangular,表示等权重,即不加权)
我们把数据输出之后上传kaggle,准确率只有0.81

这里写图片描述


猜你喜欢

转载自blog.csdn.net/Cocaine_bai/article/details/82182709