我已经使用 KNN 分类器在数据集上尝试了我的模型,我想知道模型中最有贡献的特征以及预测中最有贡献的特征。
我正在努力寻找最佳K价值KNeighborsClassifier。
这是我的数据集代码iris:
k_loop = np.arange(1,30)
k_scores = []
for k in k_loop:
knn = KNeighborsClassifier(n_neighbors=k)
cross_val = cross_val_score(knn, X, y, cv=10 , scoring='accuracy')
k_scores.append(cross_val.mean())
Run Code Online (Sandbox Code Playgroud)
我在每个循环中取了 cross_val_score 的平均值并绘制了它。
plt.style.use('fivethirtyeight')
plt.plot(k_loop, k_scores)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这就是结果。
k您可以看到,当介于 到14之间时,准确度更高20。
1)如何选择k的最佳值。
2)还有其他方法来计算和找到最佳值吗K?
3)任何其他改进建议也将受到赞赏。我是新来的ML
我有两个变量 X 和 Y。
X 的结构(即 np.array):
[[26777 24918 26821 ... -1 -1 -1]
[26777 26831 26832 ... -1 -1 -1]
[26777 24918 26821 ... -1 -1 -1]
...
[26811 26832 26813 ... -1 -1 -1]
[26830 26831 26832 ... -1 -1 -1]
[26830 26831 26832 ... -1 -1 -1]]
Run Code Online (Sandbox Code Playgroud)
Y的结构:
[[1252, 26777, 26831], [1252, 26777, 26831], [1252, 26777, 26831], [1252, 26777, 26831], [1252, 26777, 26831], [1252, 26777, 26831], [25197, 26777, 26781], [25197, 26777, 26781], [25197, 26777, 26781], [26764, 25803, …Run Code Online (Sandbox Code Playgroud) 我尝试使用kknn+ 循环为模型创建留一交叉验证,并将其与 train.kknn 进行比较。
我将数据分为两部分:训练(80% 数据)和测试(20% 数据)。在训练数据中,我排除了循环中的一个点来手动创建 LOOCV。
我认为 中出现了问题predict(knn.fit, data.test)。我试图找到如何kknn通过 kknn 包指令和在线进行预测,但所有示例都是“摘要(模型)”和“表(验证...)”,而不是对单独测试数据的预测。代码在函数predict(model, dataset)中运行成功train.kknn,所以我想我可以在 kknn 中使用类似的参数。
不知道是否有这样的预测功能kknn。如果是,我应该给出什么论据?
期待您的建议。谢谢。
library(kknn)
for (i in 1:nrow(data.train)) {
train.data <- data.train[-i,]
validation.data <- data.train[i,]
knn.fit <- kknn(as.factor(R1)~., train.data, validation.data, k = 40,
kernel = "rectangular", scale = TRUE)
# train.data + validation.data is the 80% data I split.
}
pred.knn <- predict(knn.fit, data.test) # data.test is 20% data.
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
switch(type, raw = …
我有一个KNN模型,我正在使用该contour函数进行绘图.这是我正在做的事情的简单例子(基于此Purdue考试):
library(class)
library(nnet)
TrainC<-read.table("http://miner.chem.purdue.edu/Exam1/TrainC.dat")
names(TrainC)<-c("x1","x2","y")
K=15
p <- as.matrix(TrainC[, -3])
xp <- seq(min(TrainC$x1), max(TrainC$x1), length = 50); np <- length(xp)
yp <- seq(min(TrainC$x2), max(TrainC$x2), length = 50)
tp<-TrainC$y
yhat <- knn(p, p, tp, k = K)
plot(TrainC[, 1], TrainC[, 2], xlab = "x1", ylab = "x2", col=as.numeric(TrainC$y)+1)
pt <- expand.grid(x1 = xp, x2 = yp)
Z <- knn(p, pt, tp, k = K)
zp<-class.ind(Z)[,1] - class.ind(Z)[,2]
contour(xp, yp, matrix(zp, np), add = T, levels = 0, …Run Code Online (Sandbox Code Playgroud) 我有一大堆功能,如下所示:
id1 28273 20866 29961 27190 31790 19714 8643 14482 5384 .... upto 1000
id2 12343 45634 29961 27130 33790 14714 7633 15483 4484 ....
id3 ..... ..... ..... ..... ..... ..... .... ..... .... .... . . .
...
id200000 .... .... ... .. . . . .
Run Code Online (Sandbox Code Playgroud)
我想计算每个id欧氏距离并对它们进行排序以找到最近的5个点.因为我的数据集非常大.什么是最好的方法.
如果我们有一个6行和10列的矩阵,我们必须确定k值.如果我们假设默认k值是5,如果我们的列少于5,行数相同6,我们可以假设列数= k值是否正确?即rows = 6 cols = 4则k = col-1 => k = 3
我决定将一些Python代码从Peter Harrington的机器学习中转换为Julia,从kNN算法开始.
归他提供了一个数据集后,我写了几个功能:find_kNN(),mass_kNN(即发现k近邻的多个输入的功能),以及一个分割给定数据集为随机挑选训练和测试数据集,调用一个函数mass_kNN(),并将得到的准确性多次绘制.
然后我比较了Julia代码和等效的Python代码之间的运行时间.(我在朱莉娅使用距离来找到欧几里德距离和牛羚进行绘图,但是关闭绘图并不会影响时间.)
结果:
Julia:
已用时间:1.175523034秒(分配455531636字节,gc时间47.54%)
Python:
时间流逝:0.9517326354980469秒
我想知道是否有办法加速我的Julia代码,或者它是否在此时尽可能快地运行(我的意思是,如果在使代码运行最快的方面有任何明显的错误.)
谢谢!..
编辑:删除convert()语句并将所有内容传递给Real,将时间减慢到2.29秒.
刚刚从opencv-2.4.11升级,KNearest似乎不见了
In [27]: import cv2
In [28]: print(cv2.__version__)
3.0.0-beta
In [29]: cv2.KNearest()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-d2ea29abad59> in <module>()
----> 1 cv2.KNearest()
AttributeError: 'module' object has no attribute 'KNearest'
In [30]: cv2.K
cv2.KAZE_DIFF_CHARBONNIER cv2.KAZE_DIFF_WEICKERT cv2.KMEANS_RANDOM_CENTERS cv2.KeyPoint
cv2.KAZE_DIFF_PM_G1 cv2.KAZE_create cv2.KMEANS_USE_INITIAL_LABELS cv2.KeyPoint_convert
cv2.KAZE_DIFF_PM_G2 cv2.KMEANS_PP_CENTERS cv2.KalmanFilter cv2.KeyPoint_overlap
Run Code Online (Sandbox Code Playgroud) 我正在努力在TensorFlow中实现K-Nearest Neighbor.我认为要么我忽略了一个错误,要么做了一些可怕的错误.
以下代码始终将Mnist标签预测为0.
from __future__ import print_function
import numpy as np
import tensorflow as tf
# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
K = 4
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
# In this example, we limit mnist data
Xtr, Ytr = mnist.train.next_batch(55000) # whole training set
Xte, Yte = mnist.test.next_batch(10000) # whole test set
# tf Graph Input
xtr = tf.placeholder("float", [None, 784])
ytr = tf.placeholder("float", [None, 10])
xte = tf.placeholder("float", [784])
# Euclidean Distance
distance = tf.neg(tf.sqrt(tf.reduce_sum(tf.square(tf.sub(xtr, xte)), reduction_indices=1))) …Run Code Online (Sandbox Code Playgroud) knn ×10
python ×6
r ×2
scikit-learn ×2
dataframe ×1
ggplot2 ×1
julia ×1
matlab ×1
opencv3.0 ×1
pandas ×1
python-2.7 ×1
python-3.x ×1
tensorflow ×1