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

如何使用sklearn.datasets.load_files正确加载本地目录中的图像?

问题分析与解决方法

你遇到的核心问题是误解了sklearn.datasets.load_files()的用途——这个函数是用来加载文本文件数据集的,它会把每个文件的内容读取成字符串,而非将图像解析为机器学习可处理的数值矩阵,这才是"could not convert string to float"错误的根源,和文件编码毫无关系。

正确处理流程

要完成频谱图分类任务,需要将png图像转换为数值特征矩阵,具体步骤如下:

1. 获取文件路径与标签

用load_files自动按子文件夹分类获取路径(不要加载文件内容):

from sklearn.datasets import load_files

dataset = load_files('你的数据集根目录', load_content=False)
# dataset.filenames: 所有图像的完整路径列表
# dataset.target: 对应类别的整数标签

2. 图像转数值特征

用PIL读取图像并转换为扁平化的数值数组(以灰度图为例,彩色图可调整处理逻辑):

from PIL import Image
import numpy as np

def process_image(img_path):
    # 打开图像并转为灰度图,减少特征维度
    img = Image.open(img_path).convert('L')
    # 转为numpy数组并扁平化,得到1D特征向量
    return np.array(img).flatten()

# 批量处理所有图像,生成特征矩阵X和标签数组y
X = np.array([process_image(path) for path in dataset.filenames])
y = dataset.target

3. 训练分类模型

注意你做的是分类任务,应使用DecisionTreeClassifier而非回归模型DecisionTreeRegressor:

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化并训练决策树分类器
tree_clf = DecisionTreeClassifier(max_depth=3)
tree_clf.fit(X_train, y_train)

# 输出模型准确率
print(f"训练集准确率: {tree_clf.score(X_train, y_train):.2f}")
print(f"测试集准确率: {tree_clf.score(X_test, y_test):.2f}")

额外提示

  • 若频谱图为彩色,可保留RGB三通道特征,或根据需求转为灰度图降低计算量
  • 传统机器学习方法处理图像时,扁平化像素是基础方案;若追求更好效果,可尝试用预训练CNN提取高级特征

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:31:44