IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 计算图像相关性并筛选相关性低的特征 -> 正文阅读

[Python知识库]python 计算图像相关性并筛选相关性低的特征

import os
import imageio
import numpy as np


def export_corr(out_path, coe: np.ndarray, feature_name):
    """
    导出相关性矩阵为CSV文件
    :param out_path: 文件名
    :param coe: 2d相关性矩阵
    :param feature_name: 1d列表 参数名
    :return:
    """
    f = open(out_path, 'w')
    f.write('\t'.join(['correlation'] + list(feature_name)) + '\n')
    # 每行前加上feature_name
    for i in range(len(feature_name)):
        f.write('\t'.join([feature_name[i]] + [str(j) for j in coe[i]]) + '\n')
    f.close()


def feature_select_first(coe: np.ndarray, coe_limit=0.5):
    """
    优先保留排位靠前的参数
    :param coe: 2d相关性矩阵
    :param coe_limit: 相关性阈值
    :return: 剩余参数索引
    """
    coe_mask = np.abs(coe) - np.eye(len(file_name)) > coe_limit
    indices = []
    for i in range(len(file_name)):
        if not coe_mask[i, indices].any():
            indices.append(i)
    return indices


def feature_select_more(coe: np.ndarray, coe_limit=0.5, is_del_more_first=True):
    """
    优先剔除相关数量较多/较少的参数
    :param coe: 2d相关性矩阵
    :param coe_limit: 相关性阈值
    :param is_del_more_first: 优先剔除相关多还是少的参数, True:多的, False:少的 (推荐True, False会导致相近特征全部删除)
    :return: 剩余参数索引
    """
    coe_mask = np.abs(coe) - np.eye(len(file_name)) > coe_limit
    indices = []
    while True:
        cor_num = [coe_mask[i].sum() for i in range(len(file_name))]    # 计算高相关的数量
        if not is_del_more_first:
            cor_num = [i+len(file_name) if i == 0 else i for i in cor_num]
        index = np.argmax(cor_num) if is_del_more_first else np.argmin(cor_num)   # 取最高/最低相关数量的参数
        indices.append(index)
        coe_mask[index, :] = False
        coe_mask[:, index] = False
        if not coe_mask.any():
            break
    indices = [i for i in range(len(file_name)) if i not in indices]    # 计算剩余参数索引
    return indices


# tif文件夹路径
path = [r'D:\data\0.25\a',
		r'D:\data\0.25\b',
		r'D:\data\0.25\c',
        ]
# 获取文件夹下所有.tif文件的绝对路径
file_name = np.concatenate([[i[:-4] for i in os.listdir(p) if i.endswith('.tif')] for p in path])
file_path = np.concatenate([[os.path.join(p, i) for i in os.listdir(p) if i.endswith('.tif')] for p in path])
# 将所有文件读入一个array
img_array = np.array([imageio.imread(i) for i in file_path])
# flatten
img_array = img_array.reshape(img_array.shape[0], -1)

# 检查NaN, 构建mask
nan_file = np.isnan(img_array).any(axis=1)
nan_mask = np.isnan(img_array).any(axis=0)
if nan_file.any():
    print('Warning: NaN data in:')
    for i in np.where(nan_file)[0]:
        print(file_name[i])

# 计算相关性
coe = np.corrcoef(img_array[:, ~nan_mask])
if np.isnan(coe).any():
    raise Exception('Error: NaN data in correlation matrix')

# 导出相关性矩阵
export_corr(r'D:\corr.csv', coe, file_name)

# 剔除相关性高于coe_limit的参数
coe_limit = 0.5
indices = feature_select_more(coe, coe_limit=coe_limit)
print('-'*80)
print('Select: %i Features with coe_limit=%f\n' % (len(indices), coe_limit))
print('Feature:', file_name[indices])
print('-'*80)


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:09:46  更:2022-04-06 23:09:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:44:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码