[PYTHON] Mise en œuvre d'une analyse de composants indépendante

L'analyse indépendante des composants est utilisée pour la séparation aveugle des sources. Dans cette méthode, deux types de sons sont distingués d'un mélange de deux sons différents. Cette fois, nous allons l'implémenter en utilisant l'une des méthodes, le suivi de projection. Le suivi de projection est l'extraction de plus de parties non gaussiennes à partir de deux éléments. Cela équivaut à extraire le son le plus indépendant de la théorie de la limitation du pôle central et à trouver un non-Gauss.

En supposant qu'il existe deux appareils qui peuvent entendre le son en premier. Le volume et l'ordre des sons n'ont pas d'importance.

motivation

Tâche

algorithme

Suivi des projections Approximation de Newton

Génération aléatoire

import numpy as np
from scipy.linalg import sqrtm
import math
import matplotlib.pyplot as plt


def generate_data(n=1000):
    global M, b
    x = np.concatenate([np.random.rand(n, 1), np.random.randn(n, 1)], axis=1)
    x[0, 1] = 6   # outlier
    x = (x - np.mean(x, axis=0)) / np.std(x, axis=0)  # Standardization
    M = np.array([[1, 3], [5, 3]])
    x = x.dot(M.T)
    x = np.linalg.inv(sqrtm(np.cov(x, rowvar=False))).dot(x.T).T
    b  = np.random.uniform(0.08, -0.08, size= (2, 1))
    return x

X = generate_data()

for i in range(X.shape[0]):
  plt.scatter(generate_data()[i][0], generate_data()[i][1], color= 'red')
plt.show()

image.png

Les voix sont déjà mixées dans la matrice M ci-dessus.

Définition de la fonction à introduire

def g_s_3_dif(s):
  return 3 * (s**2)

def g_tan_dif (s):
  return 1 - (math.tanh(s))**2

def g_s_3 (s):
  return s**3

def g_tan (s):
  return math.tanh(s)

Sphéroïdisation

#Est-ce sphérique de x?
def kyujouka ():
  X_= []
  for i in range(X.shape[0]):
    x0, x1 = 0, 0
    n =X.shape[0]
    for j in range(X.shape[0]):
      x0 += X[j][1]
      x1 += X[j][1]
    x_ = (X[i] - [x0/n, x1/n])
    X_.append(x_.tolist())
  X_ = np.array(X_)
#   X_.append(x_)
  global X__
  X__ = []
  for l in range(X_.shape[0]):
    a = np.matmul(X_[l], X_[l].T)/n
    aa = 1/math.sqrt(a)
    x__ = aa*X_[l]
    X__.append(x__)
  return X__
X__ = kyujouka()
print((X__))

image.png

Lors de l'utilisation de la netteté


difference = 1
b  = np.random.uniform(0.08, -0.08, size= (1, 2))
print(b)
X__ = np.array(kyujouka())
while difference > 0.1:
  n = X.shape[0]
  sum_dif, sum_ = 0, 0
  for i in range(X.shape[0]):
    a = np.matmul(b, X__[i].T)
    g = g_s_3(a[0])
    gdif = g_s_3_dif(a[0])
    sum_dif += gdif
    sum_ += X__[i]*g
  b_before = b
  b = (sum_dif/n)*b - (sum_/n)
  b = b/math.sqrt(np.matmul(b, b.T)[0][0])
  difference = abs((b[0][0]) - abs(b_before[0][0]))
y =[]
for i in range(X.shape[0]):
  a = np.matmul(b, X[i].T)
  y.append(a[0])

aa = np.histogram(y, bins = 50)
a_bins = aa[1]
a_hist = aa[0]
X1 = []
for i in range(1, len(a_bins)):
    X1.append((a_bins[i-1]+a_bins[i])/2)
plt.bar(X1,a_hist, width=0.08)

image.png

Proche de Gauss, le suivi de projection ne fonctionne pas bien.

Lors de l'utilisation de tanh

difference = 1
b  = np.random.uniform(0.08, -0.08, size= (1, 2))
print(b)
X__ = np.array(kyujouka())
while difference > 0.1:
  n = X.shape[0]
  sum_dif, sum_ = 0, 0
  for i in range(X.shape[0]):
    a = np.matmul(b, X__[i].T)
    g = g_tan(a[0])
    gdif = g_tan_dif(a[0])
    sum_dif += gdif
    sum_ += X__[i]*g
  b_before = b
  b = (sum_dif/n)*b - (sum_/n)
  print(np.matmul(b, b.T)[0][0], b)
  b = b/math.sqrt(np.matmul(b, b.T)[0][0])
  print(b)
  difference = abs((b[0][0]) - abs(b_before[0][0]))

  print(difference)

y =[]
for i in range(X.shape[0]):
  a = np.matmul(b, X[i].T)
  y.append(a[0])
aa = np.histogram(y, bins =50)
print(aa)
a_bins = aa[1]
a_hist = aa[0]
X1 = []
for i in range(1, len(a_bins)):
    X1.append((a_bins[i-1]+a_bins[i])/2)
plt.bar(X1,a_hist, width=0.05)

image.png

Bien séparé

Recommended Posts

Mise en œuvre d'une analyse de composants indépendante
Ceci et cela de l'analyse en composantes principales
PRML Chapitre 12 Mise en œuvre de l'analyse principale bayésienne Python
[Python] Comparaison de la théorie de l'analyse des composants principaux et de l'implémentation par Python (PCA, Kernel PCA, 2DPCA)
Implémentation de la séquence de Fibonacci
Analyse en composantes principales (Analyse en composantes principales: ACP)
Bases de l'analyse de régression
Compréhension mathématique de l'analyse en composantes principales depuis le début
Défiez l'analyse des composants principaux des données textuelles avec Python
Analyse en composants principaux (PCA) et analyse en composants indépendants (ICA) avec python
Implémentation informatique quantique de Quantum Walk 2
Implémentation de TF-IDF à l'aide de gensim
Implémentation de MathJax sur Sphinx
Explication et mise en œuvre de SocialFoceModel
Analyse statique des programmes Python
Mise en œuvre de la théorie des jeux - Le dilemme du prisonnier -
Analyse de séries chronologiques La mise en œuvre est bloquée-Notes-
Apprendre sans enseignant 3 Analyse des principales composantes
Implémentation informatique quantique de Quantum Walk 3
Implémentation Python du filtre à particules
Implémentation du tri rapide en Python
Implémentation informatique quantique de Quantum Walk 1
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Implémentation de Scale-Space pour SIFT
Introduction aux bases de Python de l'apprentissage automatique (apprentissage non supervisé / analyse principale)
[GWAS] Tracez les résultats de l'analyse en composantes principales (ACP) par PLINK
Explication et mise en œuvre de PRML Chapitre 4
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Explication et implémentation de l'algorithme ESIM
Introduction et mise en œuvre de la fonction d'activation
Qiskit: Implémentation de Quantum Boltsman Machine
Implémentation Python du filtre à particules auto-organisateur
Résumé de l'implémentation de base par PyTorch
Mise en place d'un filtre à particules simple
Implémentation d'un réseau de neurones à deux couches 2
Implémentation de la fonction de connexion dans Django
Implémentation informatique quantique de la marche quantique à 3 états
Analyse négative / positive 1 Application de l'analyse de texte
Implémentation Einsum de la méthode d'itération de valeur
Implémentation du jeu de vie en Python
Reconnaissance faciale à l'aide de l'analyse des composants principaux
Explication et mise en œuvre du perceptron simple
Analyse des composants principaux avec Spark ML
100 traitement du langage knock-59: analyse de la formule S
Implémentation des notifications de bureau à l'aide de Python
implémentation de c / c ++> RingBuffer (N marges)
Implémentation Python de l'arborescence de segments non récursive
Implémentation de Light CNN (Python Keras)
Recommandation d'analyse des données à l'aide de MessagePack
Qiskit: Implémentation de QAOA sans Qiskit Aqua
Implémentation du tri original en Python
Implémentation de la méthode Dyxtra par python
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Implémentation simple de l'analyse de régression avec Keras
Python: apprentissage non supervisé: analyse principale
Traitement des données 2 Analyse de divers formats de données