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

能否直接将py2neo返回的Cursor对象输入机器学习模型?

能否直接将py2neo的Cursor对象传入机器学习模型?

不行,没法直接把py2neo.cypher.Cursor对象传入train_test_split或其他机器学习模型。

原因

scikit-learn等主流机器学习库的API(包括train_test_split)要求输入是序列或类数组结构(比如列表、NumPy数组、Pandas DataFrame),这类结构支持随机访问、形状检查等ML算法必需的操作。而Cursor本质是一个迭代器,只会逐行返回Neo4j查询结果,不具备ML库需要的核心数据结构特性,所以会抛出Expected sequence or array-like, got <class 'py2neo.cypher.Cursor'>错误。

替代方案

虽然不能直接用Cursor,但可以用高效的方式将其转换为ML库支持的类型,或者在数据库端提前拆分数据集:

方案1:快速转换为NumPy数组

直接从Cursor生成数组,避免冗余的中间存储:

import numpy as np
from sklearn.model_selection import train_test_split
from py2neo import Graph

# 连接数据库
graph = Graph("bolt://localhost:11003", auth=("neo4j", "12345678"))

# 获取Cursor对象
cursor_X = graph.run("MATCH (n:Battery) RETURN n.cycle, n.voltage_measured, n.current_measured, n.temperature_measured,n.voltage_load")
cursor_y = graph.run("MATCH (n:Battery) RETURN n.time")

# 转换为NumPy数组
X = np.array(list(cursor_X))
y = np.array(list(cursor_y)).flatten()  # 将单列标签转为一维数组

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

方案2:数据库端拆分(适合大数据量)

如果数据量极大,不想一次性加载到Python内存,可以在Neo4j中直接拆分数据集,再分别读取:

# 训练集:抽取80%随机样本
train_cursor_X = graph.run("MATCH (n:Battery) WHERE rand() < 0.8 RETURN n.cycle, n.voltage_measured, n.current_measured, n.temperature_measured,n.voltage_load")
train_cursor_y = graph.run("MATCH (n:Battery) WHERE rand() < 0.8 RETURN n.time")

# 测试集:抽取剩余20%样本
test_cursor_X = graph.run("MATCH (n:Battery) WHERE rand() >= 0.8 RETURN n.cycle, n.voltage_measured, n.current_measured, n.temperature_measured,n.voltage_load")
test_cursor_y = graph.run("MATCH (n:Battery) WHERE rand() >= 0.8 RETURN n.time")

# 转换为数组供模型使用
X_train = np.array(list(train_cursor_X))
y_train = np.array(list(train_cursor_y)).flatten()
X_test = np.array(list(test_cursor_X))
y_test = np.array(list(test_cursor_y)).flatten()

注意:直接用rand()可能导致训练/测试集有少量重叠,更严谨的方式是先给每个Battery节点添加一个随机数属性,再基于该属性拆分。

内容的提问来源于stack exchange,提问作者Utkarsh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:40:56