[PYTHON] Implementierung einer unabhängigen Komponentenanalyse

Die unabhängige Komponentenanalyse wird zur blinden Quellentrennung verwendet. Dies unterscheidet zwei Arten von Klängen von einer Mischung aus zwei verschiedenen Klängen. Dieses Mal werden wir es mit einer der Methoden implementieren, der Projektionsverfolgung. Projektionsverfolgung ist die Extraktion von mehr nicht-Gaußschen Teilen aus zwei Elementen. Dies entspricht dem Extrahieren des unabhängigsten Klangs aus der Theorie der Zentralpolbegrenzung und dem Auffinden von Nicht-Gauß.

Angenommen, es gibt zwei Geräte, die den Ton zuerst hören können. Die Lautstärke und Reihenfolge der Sounds spielt keine Rolle.

Motivation

Aufgabe

Algorithmus

Projektionsverfolgung Newton-Näherung

Zufällige Generierung

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

Die Stimmen sind bereits in der oben gezeigten Matrix M gemischt.

Definition der einzuführenden Funktion

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äroidisierung

#Ist es sphärisch von 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

Bei Verwendung von Schärfe


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

In der Nähe von Gauß funktioniert die Projektionsverfolgung nicht gut.

Bei Verwendung von 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

Gut getrennt

Recommended Posts

Implementierung einer unabhängigen Komponentenanalyse
Dies und das der Hauptkomponentenanalyse
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
[Python] Vergleich der Theorie und Implementierung der Hauptkomponentenanalyse durch Python (PCA, Kernel PCA, 2DPCA)
Implementierung der Fibonacci-Sequenz
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Grundlagen der Regressionsanalyse
Mathematisches Verständnis der Hauptkomponentenanalyse von Anfang an
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
Quantum Computer Implementierung von Quantum Walk 2
Implementierung von TF-IDF mit Gensim
Implementierung von MathJax auf Sphinx
Erklärung und Implementierung von SocialFoceModel
Statische Analyse von Python-Programmen
Implementierung der Spieltheorie - Gefangenendilemma -
Zeitreihenanalyse Die Implementierung steckt fest.
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
Quantum Computer Implementierung von Quantum Walk 3
Python-Implementierung des Partikelfilters
Implementierung der schnellen Sortierung in Python
Quantum Computer Implementierung von Quantum Walk 1
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Implementierung von Scale-Space für SIFT
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
[GWAS] Zeichnen Sie die Ergebnisse der Hauptkomponentenanalyse (PCA) von PLINK auf
Erläuterung und Implementierung von PRML Kapitel 4
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Erklärung und Implementierung des ESIM-Algorithmus
Einführung und Implementierung der Aktivierungsfunktion
Qiskit: Implementierung einer Quantenbolzenmaschine
Python-Implementierung eines selbstorganisierenden Partikelfilters
Zusammenfassung der grundlegenden Implementierung von PyTorch
Implementierung eines einfachen Partikelfilters
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Implementierung der Login-Funktion in Django
Quantencomputer-Implementierung eines 3-Zustands-Quantenlaufs
Negative / Positive Analyse 1 Anwendung der Textanalyse
Einsum Implementierung der Wertiterationsmethode
Implementierung eines Lebensspiels in Python
Gesichtserkennung mit Hauptkomponentenanalyse
Erklärung und Implementierung von einfachem Perzeptron
Hauptkomponentenanalyse mit Spark ML
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
Implementierung von Desktop-Benachrichtigungen mit Python
Implementierung von c / c ++> RingBuffer (N Ränder)
Python-Implementierung eines nicht rekursiven Segmentbaums
Implementierung von Light CNN (Python Keras)
Empfehlung zur Datenanalyse mit MessagePack
Qiskit: Implementierung von QAOA ohne Qiskit Aqua
Implementierung der ursprünglichen Sortierung in Python
Implementierung der Dyxtra-Methode durch Python
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Einfache Implementierung einer Regressionsanalyse mit Keras
Datenverarbeitung 2 Analyse verschiedener Datenformate