You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Julia的ScikitLearn库运行KNN代码报语法错误求助

错误原因

你写的from ScikitLearn.neighbors import KNeighborsClassifier这类写法是Python的导入语法,Julia语法不支持这种写法,所以编译器在解析到from之后的ScikitLearn标识时无法识别,直接抛出语法错误。

修正方案

  1. 导入scikit-learn的Python模块要使用ScikitLearn.jl提供的@sk_import宏,替换原有的三行Python风格导入代码
  2. 补充缺失的依赖导入(比如Random包的shuffle函数)
  3. 修正数据读取逻辑:你当前直接把数据集读成了纯字符串,无法直接做结构化处理,需要用CSV.read解析为DataFrame,再拆分特征列和标签列
  4. 修正数据集拆分逻辑:你自定义的splitTrainTest返回的是训练/测试全量数据集,不能直接赋值给特征X和标签y

修正后的完整可运行代码如下:

import Pkg
# 首次运行需要安装依赖,后续运行可以注释掉下面的安装代码
Pkg.add("ScikitLearn")
Pkg.add("DataFrames")
Pkg.add("CSV")
Pkg.add("DataStructures")
Pkg.add("Random")

using ScikitLearn: fit!, predict, @sk_import
using DataFrames, CSV, DataStructures, Random

# 替换原Python风格导入
@sk_import neighbors.KNeighborsClassifier: KNeighborsClassifier
@sk_import model_selection: train_test_split
@sk_import metrics: accuracy_score

function splitTrainTest(data, at = 0.8)
    n = nrow(data)
    ind = shuffle(1:n)
    train_ind = view(ind, 1:floor(Int, at*n))
    test_ind = view(ind, (floor(Int, at*n)+1):n)
    return data[train_ind,:], data[test_ind,:]
end

# 数据准备:解析为DataFrame,header=false是因为乳腺癌数据集默认不带表头
df = CSV.read("breast-cancer.data", DataFrame, header=false)
# 拆分特征和标签,假设数据集最后一列是分类标签,可根据你的实际数据调整列索引
X = Matrix(df[:, 1:end-1])
y = Vector(df[:, end])

# 拆分训练集测试集,sklearn的train_test_split和你自定义的splitTrainTest选一个使用即可,这里直接用sklearn的实现
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=42)

# 训练模型
knn = KNeighborsClassifier(n_neighbors=3)
fit!(knn, x_train, y_train)

# 输出准确率
println("模型准确率:", accuracy_score(y_test, predict(knn, x_test)))

内容的提问来源于stack exchange,提问作者Bill Moran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:54:02