Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何改进knn模型?

如何改进knn模型?
EN

Stack Overflow用户
提问于 2022-12-03 04:44:19
回答 2查看 23关注 0票数 -1

我建立了一个knn分类模型。不幸的是,我的模型有超过80%的准确性,我想得到一个更好的结果。我能要些小费吗?也许我用了太多的预测器?

我的数据= https://www.openml.org/search?type=data&sort=runs&id=53&status=active

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix, accuracy_score, f1_score
from sklearn.model_selection import GridSearchCV

heart_disease = pd.read_csv('heart_disease.csv', sep=';', decimal=',')
y = heart_disease['heart_disease']
X = heart_disease.drop(["heart_disease"], axis=1)

correlation_matrix = heart_disease.corr()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123)

scaler = MinMaxScaler(feature_range=(-1,1))

X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

knn_3 = KNeighborsClassifier(3, n_jobs = -1)
knn_3.fit(X_train, y_train)
y_train_pred = knn_3.predict(X_train)
labels = ['0', '1']

print('Training set')
print(pd.DataFrame(confusion_matrix(y_train, y_train_pred), index = labels, columns = labels))
print(accuracy_score(y_train, y_train_pred))
print(f1_score(y_train, y_train_pred))

y_test_pred = knn_3.predict(X_test)

print('Test set')
print(pd.DataFrame(confusion_matrix(y_test, y_test_pred), index = labels, columns = labels))
print(accuracy_score(y_test, y_test_pred))
print(f1_score(y_test, y_test_pred))

hyperparameters = {'n_neighbors' : range(1, 15), 'weights': ['uniform','distance']}

knn_best = GridSearchCV(KNeighborsClassifier(), hyperparameters, n_jobs = -1, error_score = 'raise')
knn_best.fit(X_train,y_train)
knn_best.best_params_

y_train_pred_best = knn_best.predict(X_train)
y_test_pred_best = knn_best.predict(X_test)

print('Training set')
print(pd.DataFrame(confusion_matrix(y_train, y_train_pred_best), index = labels, columns = labels))
print(accuracy_score(y_train, y_train_pred_best))
print(f1_score(y_train, y_train_pred_best))

print('Test set')
print(pd.DataFrame(confusion_matrix(y_test, y_test_pred_best), index = labels, columns = labels))
print(accuracy_score(y_test, y_test_pred_best))
print(f1_score(y_test, y_test_pred_best))
EN

回答 2

Stack Overflow用户

发布于 2022-12-03 04:53:57

有几件事你可以尝试提高你的KNN模型的准确性。

首先,您可以尝试调优模型的超参数,例如要考虑的最近邻居的数目,或者用来度量点间相似性的距离度量。

要调优KNN模型的超参数,可以使用诸如cross-validation、网格搜索、等技术来尝试不同的超参数组合,并找到最适合您的数据的组合。

您还可以尝试预处理您的数据,使其更适合于KNN。例如,您可以尝试使用主成分分析 (PCA)等技术来降低数据的维度。这可以帮助消除数据中的冗余,减少维数,这可以使KNN更容易找到最近的邻居。

此外,您可以尝试完全使用不同的分类算法,例如logistic回归或决策树。这些算法可能更适合您的数据,并可能产生比KNN更好的结果。

您可以尝试的另一件事是使用集成方法,例如打包或增强,将多个KNN模型组合起来,并可能提高它们的准确性。集成方法可以有效地减少过度拟合和提高模型的通用性。

票数 2
EN

Stack Overflow用户

发布于 2022-12-03 05:10:35

这只是答案的一小部分,以便为k_neighbors找到最佳的数字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
errlist = [] #an error list to append
for i in range(1,40): #from 0-40 numbers to use in k_neighbors
    knn_i = KNeighborsClassifier(k_neighbors=i)
    knn_i.fit(X_train,y_train)
    errlist.append(np.mean(knn_i.predict(X_test)!=y_test)) # append the mean of failed-predict numbers

绘制一行以查看最佳k_neighbors:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.plot(range(1,40),errlist)

请随意更改范围内的号码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74666866

复制
相关文章
如何在iOS 7.0中隐藏状态栏
使用Cordova做了一个小项目,在原来iOS6的时候显示挺好,升级为iOS7后,每次App启动后都会显示状态栏,而且状态栏和App的标题栏重叠在一起,非常难看,因此需要将状态栏隐藏起来。
大江小浪
2018/07/24
1.2K0
如何在iOS 7.0中隐藏状态栏
zblog怎么在移动端显示/隐藏侧栏模块
关于zblog主题模板手机移动端针对不同主题采用了不同的方案,有些是默认显示,有些不显示侧栏,总归没有一个完美的解决方案,所以今天就抽空水一篇文章,教大家怎么显示或者隐藏侧栏模板的内容。宁静致远主题没有侧栏,所以我们以这个主题模板为例,灌水开始。。。
李洋博客
2021/06/15
1.1K0
DrawerLayout侧滑栏
第一步:这是最基本的一个布局文件,里面有主界面布局,下面是包含一个button的按钮;
全栈程序员站长
2022/09/13
6670
如何在linux中重命名文件和目录
重命名文件和目录是你经常需要在Linux系统上执行的最基本任务之一。 重命名单个文件很简单,但一次重命名多个文件可能是一个挑战,特别是对于刚接触Linux的用户而言。你可以使用GUI文件管理器或命令行终端重命名文件。 在本教程中,我们将向你展示如何使用mv和rename命令重命名文件和目录。 使用mv命令重命名文件 mv命令(移动时间短)用于将文件从一个位置重命名或移动到另一个位置。mv命令的语法如下: mv [OPTIONS] source destination source可以是一个或多个文件或目录
入门笔记
2022/06/02
3.9K0
如何在Linux中删除目录的所有文件?
在Linux操作系统中,删除目录的所有文件是一项常见任务。无论是清理不需要的文件还是准备删除整个目录,正确地删除目录下的所有文件是重要的。本文将详细介绍如何在Linux中删除目录的所有文件,包括使用常见的命令和技巧进行操作。
网络技术联盟站
2023/06/08
17.2K0
如何在Linux中删除目录的所有文件?
如何在Ansible中复制多个文件和目录
Ansible 通过 copy 和 fetch 模块提供了基本的复制文件和目录的功能.
东风微鸣
2022/04/21
17.3K2
如何在Ansible中复制多个文件和目录
如何在Python中删除(删除)文件和目录
本教程说明了如何使用os,pathlib和shutil模块中的功能删除文件和目录。
用户5005176
2021/08/10
13.1K0
手机侧滑导航栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" /> <meta name="apple-touch-fullscreen" content="yes" /> <meta name="apple-m
用户3055976
2018/09/12
3.2K0
如何在git中删除指定的文件和目录
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113172.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
3.5K0
网页固定侧栏的做法
固定侧边的做法有很多种,今天为大家介绍一种非常简单的做法。整个html文档只有23行代码就搞定了。
业余草
2019/01/21
1.7K1
再议Linux文件、目录的隐藏属性(lsattr、chattr)
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。
耕耘实录
2018/12/20
2.9K0
侧栏恋爱计时代码分享
原文地址:https://blog.ascv.cn/archives/55.html
傲绝
2023/03/06
3810
侧栏恋爱计时代码分享
python 中目录、文件
2) open("test.txt",w)           直接打开一个文件,如果文件不存在则创建文件
py3study
2020/01/10
1.3K0
隐藏任务栏显示
我用ModifyStyleEx(WS_EX_APPWINDOW,0);隐藏了程序在任务栏的显示.
全栈程序员站长
2022/09/09
1.9K0
使用java8API遍历过滤文件目录及子目录及隐藏文件
本文中为大家介绍使用java8 Stream API逐行读取文件,以及根据某些条件过滤文件内容
字母哥博客
2020/09/23
1.4K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
28.8K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
执行du命令时统计隐藏文件和目录
在Linux和Mac下,执行du -sh 来统计目录大小时,默认不统计以点开头的文件或者目录,比如.local,因此得到不准确的统计结果。从这里知道,要统计隐藏文件和目录,可以这么用:
王云峰
2023/10/23
1.3K0
侧栏友链通讯录卡片
感觉好久好久没有写友链魔改和侧栏魔改的教程了,之前都是在捣鼓各种各样的API插件。然后我这次写的时候发现,我本地的widget文件夹里居然就剩下SAO相关的侧栏卡片pug文件了。看来我插件化的还是很勤快的嘛。不过SAO UI PLAN相关的内容还不打算做插件化,一方面我当初写的代码还比较差,一方面最近看到yamapink用vue封装的SAO UI,顿时萌生了我也要用vue来封装我所有的魔改教程的兴趣。
Akilar
2022/11/28
4360
侧栏友链通讯录卡片
点击加载更多

相似问题

复制dpdk pktgen为多个源地址读取的PCAP数据包

12

pktgen不能在ovs dpdk场景中发送数据包。

13

通过packetgen dpdk发送pcap

11

DPDK PktGen的构建问题

18

如何在dpdk-pktgen中发送大型帧

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文