1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/aBugsLife-mahalanob

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
#!/usr/bin/env bin
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np
from scipy.spatial import distance

'''
* Обработка аномальных значений расстояния Махаланобиса
* Автор: my_name_is_BUG
* Ссылки:
'''

def mahalanob(X, e):
    """
    parm X:(m x n) — матрица спектров (строки — образцы, столбцы — спектр)
    parm e:(настраиваемый параметр) коэффициент веса стандартного отклонения расстояния Махалонобиса
    return:
            Xt : матрица спектров после предварительной обработки и фильтрации по расстоянию Махалонобиса
            MahalaD: расстояние Махалонобиса для образцов
    """

    data = X.copy() # Избегаем проблем с копированием данных
    if isinstance(data, pd.DataFrame):
        data = data.values

    # Вычисляем среднее значение спектра для всех образцов
    data_mean = np.mean(data, axis=0)
    means = np.tile(data_mean, data.shape[0]).reshape((data.shape[0], data.shape[1]), order='C')

    # Вычисляем расстояние Махалонобиса между каждым образцом и средним спектром
    CenterX = data - means
    M = np.dot(CenterX.T, CenterX) / (data.shape[0] - 1)
    Minv = np.linalg.inv(M)

    MahalaD = list(distance.mahalanobis(data[i, :], data_mean, Minv) for i in range(data.shape[0]))

    # Проводим фильтрацию
    MahalaDm = np.mean(MahalaD, axis=0)
    Dstd = np.std(MahalaD, axis=0)
    Xt = []
    for i in range(data.shape[0]):
        if MahalaD[i] < (MahalaDm + e * Dstd):
            Xt.append(i)

    return Xt, MahalaD


if __name__ == "__main__":
    from pandas import DataFrame
    clomuns = ['水分 %']
    data = pd.read_excel( r"G:\PAPER\data\2020.2019_apple_data.xlsx")
    colmuns_ = data.columns.values
    X = np.abs(data.drop(clomuns, axis=1))
    y = data.loc[:,'品种'].values

    X_ = X.values()
    print(X_.shape)
    col, ma = mahalanob(X_, 3.8)
    print(col)

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Используя евклидово расстояние, исключить аномальные выборки. Расширить Свернуть
AGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/aBugsLife-mahalanob.git
git@gitlife.ru:oschina-mirror/aBugsLife-mahalanob.git
oschina-mirror
aBugsLife-mahalanob
aBugsLife-mahalanob
master