Nehmen Sie die 1. JDAL E-Qualifikation im Jahr 2020. Ein Memorandum, das ich studiert habe, weil es den Anschein hat, dass angewandte Mathematik im Problem auftauchen wird. Wir planen, ①, ② und ③ unten zusammenzufassen.
① Inverse Matrixberechnung ② Singularwertzerlegung ③ Wahrscheinlichkeit
Dieser Abschnitt beschreibt die folgenden Inhalte. ・ Inverse Matrixberechnung der quadratischen Quadratmatrix ・ Inverse Matrixberechnung der kubischen Quadratmatrix ・ Berechnung mit Luming of Numpy
Die in diesem Beispiel verwendete Matrix wurde mit dem folgenden Code erstellt.
matrix.py
import numpy as np
n = 3 #Matrixgröße
A = np.random.randint(0,9,(n,n)) #N × n-Matrixerzeugung mit ganzen Zahlen von 0 bis 9
A =
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
A^{-1} = \frac{1}{det(A)}
\begin{pmatrix}
d & -b \\
-c & a
\end{pmatrix}
det(A) = ad-bc
◆ Beispiel
A =
\begin{pmatrix}
4 & 7 \\
6 & 9
\end{pmatrix}
A^{-1}=
\frac{1}{\rm 4 ・ 9-7.6}\
\begin{pmatrix}
9 & -7 \\
-6 & 4
\end{pmatrix}
=
\begin{pmatrix}
-3/2 & 7/6 \\
1 & -2/3
\end{pmatrix}
◆ Überprüfen Sie mit Linalg von Numpy linalg ist ein lineares algebraisches Modul für numpy. Weitere Informationen finden Sie unter dem folgenden Link. <a href="http://docs.scipy.org/doc/numpy/reference/routines.linalg.html"_blank>Linear algebra (numpy.linalg)
two.py
import numpy as np
A = np.array([[4,7],[6,9]])
#Inverse Matrixberechnung
invA = np.linalg.inv(A)
print(invA)
#[[-1.5 1.16666667]
# [1. -0.66666667]]
print(np.matmul(A,invA))
#[[ 1.00000000e+00 -3.33066907e-16]
# [ 0.00000000e+00 1.00000000e+00]]
#Es ist eine Einheitsmatrix
A =
\begin{pmatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
A^{-1} = \frac{1}{det(A)}
\begin{pmatrix}
Δ_{11} & Δ_{12} & Δ_{13}\\
Δ_{21} & Δ_{22} & Δ_{23}\\
Δ_{31} & Δ_{32} & Δ_{33}
\end{pmatrix}^{T}
det(A) = a_{11}a_{22}a_{33} + a_{12}a_{23}a_{31} + a_{13}a_{21}a_{32} - a_{13}a_{22}a_{31} -a_{11}a_{23}a_{32}-a_{12}a_{21}a_{33}
Δ_{ij}: Der Matrixausdruck der 2 × 2-Matrix ohne die i-te Zeile und die j-te Spalte von A.(−1)^{i+j}Verdoppelt(Cofaktor)
◆ Bild der Matrixformel Es wird allgemein als Saras-Methode bezeichnet.
◆ Cofaktorbild
◆ Beispiel
A =
\begin{pmatrix}
7 & 7 & 5\\
8 & 5 & 6\\
2 & 0 & 7
\end{pmatrix}
det(A)=
7 ・ 5 ・ 7+7 ・ 6 ・ 2+5.8.0-5 ・ 5 ・ 2-7.6.0-08.07.7= -113
Δ_{11} = (-1)^{1+1}
\begin{vmatrix}
5 & 6 \\
0 & 7
\end{vmatrix}
=5.7-6.0=35
Δ_{12} = (-1)^{1+2}
\begin{vmatrix}
8 & 6 \\
2 & 7
\end{vmatrix}
=-8.7+6.2=-44\\
・ ・ ・ Folgendes wird weggelassen
A^{-1} =
\frac{-1}{113}\
\begin{pmatrix}
35 & -44 & -10\\
-49 & 39 & 14\\
17 & -2 & -21
\end{pmatrix}^{T}
=\frac{1}{113}\
\begin{pmatrix}
-35 & 49 & -17\\
44 & -39 & 2\\
10 & -14 & 21
\end{pmatrix}
◆ Überprüfen Sie mit Linalg von Numpy
three.py
import numpy as np
A = np.array([[7,7,5],[8,5,6],[2,0,7])
#Inverse Matrixberechnung
invA = np.linalg.inv(A)
print(invA)
#[[-0.30973451 0.43362832 -0.15044248]
# [ 0.38938053 -0.34513274 0.01769912]
# [ 0.08849558 -0.12389381 0.18584071]]
#Es ist schwer zu verstehen, weil es eine kleine Zahl ist
print(np.matmul(A,invA))
#[[ 1.00000000e+00 -1.80411242e-16 2.77555756e-17]
# [ 1.94289029e-16 1.00000000e+00 -5.55111512e-17]
# [ 4.16333634e-17 1.38777878e-17 1.00000000e+00]]
#Es ist eine Einheitsmatrix
Da es schwierig ist zu sagen, ob die inverse Matrix ein Bruch ist und die Antwort richtig ist, korrigieren Sie sie auf einen Bruch. Zuerst habe ich Fraction verwendet, eine integrierte Funktion von Python, um daraus einen Bruch zu machen.
three.py fuhr fort
from fractions import Fraction
print(Fraction(invA[0,0]))
# -2789840477132165/9007199254740992
Es ist aufgrund des Rundungsfehlers nicht zum ursprünglichen Bruch zurückgekehrt. Selbst wenn ich nachgeschlagen habe, konnte ich den Konvertierungscode von Brüchen zu Brüchen nicht finden, also habe ich ihn selbst zum Lernen gemacht. Dieses Mal habe ich es ziemlich schwer implementiert. Wenn also jemand einen besseren Weg kennt, lass es mich wissen.
Unten finden Sie den Prozessablauf und die Quelle. (1) Erstellen Sie im Voraus eine Bruchtabelle (2) Extrahieren Sie Tabellenelemente, deren Differenz zum inversen Matrixelement nahe bei 0 liegt (3) Konvertieren Sie vom Index des Tabellenelements zum Bruch
three.py fuhr fort
#Bereiten Sie eine Fraktionstabelle vor
# table_size =Bei 1000
# [[1/1,2/1,...,1000/1],[1/2,2/2,...,1000/2],...,[1/1000,2/1000,..,1000/1000]]
table_size = 3000
l_frac = np.array([[x/y for x in range(1,table_size+1)] for y in range(1,table_size+1)])
#Stellen Sie unterhalb des Fehlers ein, wenn Sie einen Bruch in Gleitkomma konvertieren
e = 1.0e-10
#Ndarray, um den Bruchteil der Antwort später zu speichern"1/5"Da ein Bruch wie eine Zeichenkette eingegeben wird, wird mit str
ans_flac = np.random.rand(len(A)**2).astype("str")
counter = 0
#Vergleichen Sie die Differenz mit der Bruchtabelle für jedes Element der inversen Matrix
for i in range(len(A)):
for j in range(len(A)):
if invA[i,j] != 0:
#Ruft den Index einer Bruchtabelle ab, die die Bedingungen erfüllt
# idx = (Index der Zeilen, die die Bedingungen erfüllen,Index der Spalten, die die Bedingungen erfüllen)
idx = np.where(abs(l_frac-abs(invA[i,j])) < e)
#Bedingter Zweig mit positiv und negativ
if invA[i,j] < 0:
#Da es mehrere Übereinstimmungen gibt, ist der erste Index(idx[][0])Wählen Sie ans_In Flac lagern
ans_flac[counter] = str(-(idx[1][0]+1)) + "/" + str(idx[0][0]+1)
counter += 1
else:
ans_flac[counter] = str(idx[1][0]+1) + "/" + str(idx[0][0]+1)
counter += 1
else:
#Wenn das inverse Matrixelement 0 ist
ans_flac[counter] = "0"
counter += 1
#In die gleiche Form wie die ursprüngliche Matrix umgewandelt
ans_flac = ans_flac.reshape([len(A),len(A)])
print(ans_flac)
#[['-35/113' '49/113' '-17/113']
# ['44/113' '-39/113' '2/113']
# ['10/113' '-14/113' '21/113']]
Wenn ein von table_size abweichender Bruch auftritt, wird ein Fehler ausgegeben. Wenn also die Ziffern des Matrixelements groß werden, müssen Sie eine größere Tabelle vorbereiten.
Dieser Abschnitt beschreibt die folgenden Inhalte. ・ Berechnung der Singularwertzerlegung ・ Berechnung mit Luming of Numpy
Der folgende Artikel war hilfreich für das Konzept und die Verwendung von Singularwerten. <a href="https://qiita.com/sakami/items/d01fa353b4e1f48623a8"_blank> Erklärung der SVD (Singular Value Decomposition)
Wie im obigen Artikel vorgestellt, wird das Buch in der Ausgabe zur Verarbeitung natürlicher Sprache mit Null detailliert beschrieben. <a href = "https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3% 82% 8BDeep-Learning-% E2% 80% 95% E8% 87% AA% E7% 84% B6% E8% A8% 80% E8% AA% 9E% E5% 87% A6% E7% 90% 86% E7 % B7% A8-% E6% 96% 8E% E8% 97% A4-% E5% BA% B7% E6% AF% 85 / dp / 4873118360 "_ blank>" Tiefes Lernen von Grund auf ② Verarbeitung natürlicher Sprache "Yasutake Saito
Ich werde die Details dem Linkziel überlassen und die Definition und Berechnung der Singularwertzerlegung üben.
Definition: Für die m × n-Matrix A erfüllt die orthogonale Matrix U m × m die folgende Beziehung,Es gibt eine n × n orthogonale Matrix V und eine m × n diagonale Matrix S.
A = USV^{T}
U,V ist jeweils AA^{T},A^{T}Es ist eine Matrix, die aus den Eigenvektoren von A besteht, und die Vektoren werden als linker Singularvektor und rechter Singularvektor bezeichnet. Die diagonale Komponente von S ist die Quadratwurzel des Eigenwerts und wird als Singularwert bezeichnet.
◆ Beispiel
A =
\begin{pmatrix}
1 & 1 & 0\\
0 & 0 & 1
\end{pmatrix}
◆ Linke Matrix U. Suchen Sie zuerst den linken Singularvektor und die Matrix U.
AA^{T} =
\begin{pmatrix}
2 & 0\\
0 & 1
\end{pmatrix}\Wenn Sie den Eigenwert auf λ setzen\\
det(AA^{T}-λE) =
\begin{vmatrix}
2-λ & 0\\
0 & 1-λ
\end{vmatrix} = 0\\
∴λ = 1,2
Wenn λ = 2, wenn der Eigenvektor auf (ux1, uy1) gesetzt ist
\begin{pmatrix}
2-λ & 0\\
0 & 1-λ
\end{pmatrix}
\begin{pmatrix}
u_{x1}\\
u_{y1}
\end{pmatrix} =
\begin{pmatrix}
0 & 0\\
0 & -1
\end{pmatrix}
\begin{pmatrix}
u_{x1}\\
u_{y1}
\end{pmatrix}
= 0\\
\\
\left\{
\begin{array}{ll}
u_{x1}・ 0+ u_{y1}・ 0 = 0 \\
u_{x1}・ 0- u_{y1}・ 1= 0
\end{array}
\right.
Wenn dies immer gilt,
∴u_{y1} = 0
Daher ist der Eigenvektor bei λ = 2 wie folgt, wenn die Länge des Vektors auf 1 standardisiert ist.
\begin{pmatrix}
u_{x1}\\
u_{y1}
\end{pmatrix}=
\begin{pmatrix}
1\\
0
\end{pmatrix}・ ・ ・(1)
In ähnlicher Weise, wenn λ = 1 ist, wenn der Eigenvektor auf (ux2, uy2) gesetzt ist
\begin{pmatrix}
2-λ & 0\\
0 & 1-λ
\end{pmatrix}
\begin{pmatrix}
u_{x2}\\
u_{y2}
\end{pmatrix} =
\begin{pmatrix}
1 & 0\\
0 & 0
\end{pmatrix}
\begin{pmatrix}
u_{x2}\\
u_{y2}
\end{pmatrix}
= 0\\
\\
\left\{
\begin{array}{ll}
u_{x2}・ 1+ u_{y2}・ 0= 0 \\
u_{x2}・ 0+ u_{y2}・ 0 = 0
\end{array}
\right.\\
∴u_{y1} = 0
Der Eigenvektor ist unten.
\begin{pmatrix}
u_{x2}\\
u_{y2}
\end{pmatrix}=
\begin{pmatrix}
0\\
1
\end{pmatrix}・ ・ ・(2)
U kann aus (1) und (2) erhalten werden.
U =
\begin{pmatrix}
u_{x1} & u_{x2}\\
u_{y1} & u_{y2}
\end{pmatrix}=
\begin{pmatrix}
1 & 0\\
0 & 1
\end{pmatrix}
◆ Rechte Matrix V. Als nächstes finden Sie den richtigen Singularvektor und die Matrix V.
A^{T}A =
\begin{pmatrix}
1 & 1 & 0\\
1 & 1 & 0\\
0 & 0 & 1
\end{pmatrix}\Wenn Sie den Eigenwert auf λ setzen\\
det(AA^{T}-λE) =
\begin{vmatrix}
1-λ & 1 & 0\\
1 & 1-λ & 0\\
0 & 0 & 1-λ
\end{vmatrix} = 0\\
(1-λ)(λ-2)λ = 0\\
∴λ = 0,1,2
Ich habe die Zwischenberechnung weggelassen, aber Sie können die Matrixformel nach der Saras-Methode berechnen. Wenn λ = 2, wenn der Eigenvektor auf (vx1, vy1, vz1) gesetzt ist)
\begin{pmatrix}
1-λ & 1 & 0\\
1 & 1-λ & 0\\
0 & 0 & 1-λ
\end{pmatrix}
\begin{pmatrix}
v_{x1}\\
v_{y1}\\
v_{z1}
\end{pmatrix} =
\begin{pmatrix}
-1 & 1 & 0\\
1 & -1 & 0\\
0 & 0 & -1
\end{pmatrix}
\begin{pmatrix}
v_{x1}\\
v_{y1}\\
v_{z1}
\end{pmatrix}
= 0\\
\\
\left\{
\begin{array}{ll}
-1 ・ v_{x1} + 1 ・ v_{y1} +0 ・ v_{z1} = 0 \\
1 ・ v_{x1} -1 ・ v_{y1} +0 ・ v_{z1} = 0 \\
0 ・ v_{x1} +0 ・ v_{y1} -1 ・ v_{z1} = 0
\end{array}
\right.
Wenn dies immer gilt,
∴v_{x1} = v_{y1},v_{z1} = 0
Daher ist der Eigenvektor
\begin{pmatrix}
v_{x1}\\
v_{y1}\\
v_{z1}
\end{pmatrix}=
\begin{pmatrix}
1/\sqrt{2}\\
1/\sqrt{2}\\
0
\end{pmatrix}・ ・ ・(3)
Die gleiche Berechnung kann durchgeführt werden, wenn λ = 1,0 ist. Hier wird nur die Antwort gegeben.
λ=Wenn 1
\begin{pmatrix}
v_{x2}\\
v_{y2}\\
v_{z2}
\end{pmatrix}=
\begin{pmatrix}
0\\
0\\
1
\end{pmatrix}・ ・ ・(4)\\
λ=Wenn 0
\begin{pmatrix}
v_{x3}\\
v_{y3}\\
v_{z3}
\end{pmatrix}=
\begin{pmatrix}
1/\sqrt{2}\\
-1/\sqrt{2}\\
0
\end{pmatrix}・ ・ ・(5)
V kann aus (3), (4) und (5) erhalten werden.
V =
\begin{pmatrix}
v_{x1} & v_{x2} & v_{x3}\\
v_{y1} & v_{y2} & v_{y3}\\
v_{z1} & v_{z2} & v_{z3}
\end{pmatrix}=
\begin{pmatrix}
1/\sqrt{2} & 0 & 1/\sqrt{2}\\
1/\sqrt{2} & 0 & -1/\sqrt{2}\\
0 & 1 & 0
\end{pmatrix}
◆ Singularitätsmatrix S. Ordnen Sie die Quadratwurzeln der Eigenwerte diagonal in absteigender Reihenfolge an.
S =
\begin{pmatrix}
\sqrt{2} & 0 & 0\\
0 & 1 & 0
\end{pmatrix}
◆ Überprüfen Verwenden Sie erneut das Linalg-Modul von numpy, um die Antworten abzugleichen. Sie können U, S, V mit einer Funktion namens linalg.svd () erhalten.
singular_value_decomposition.py
import numpy as np
A = np.array([[1,1,0],[0,0,1]])
#V wird für die Translokation berechnet
U,S,V_T = np.linalg.svd(A, full_matrices = True)
S = np.diag(S) #Der Singularwert ist[λ1,λ2]Diagonal, weil es eindimensional ist
S = np.insert(S,2,[0,0],axis = 0) #Maßanpassung
print("U=\n",U)
print("S=\n",S)
print("V=\n",V.T) #Zeigen Sie das Original V durch Translokation der Translokation
print("A=\n",np.dot(np.dot(U,S),V))
# U=
# [[1. 0.]
# [0. 1.]]
# S=
# [[1.41421356 0. 0. ]
# [0. 1. 0. ]]
# V=
# [[ 0.70710678 0. 0.70710678]
# [ 0.70710678 0. -0.70710678]
# [ 0. 1. 0. ]]
# A=
# [[1. 1. 0.]
# [0. 0. 1.]]
#Passen Sie die ursprüngliche Matrix an
Für andere Grundlagen der linearen Algebra war auch der folgende Artikel hilfreich. <a href="https://qiita.com/jun40vn/items/15627062d5f1e1dcec2e"_blank> Grundlagen des maschinellen Lernens 2 Memo zur linearen Algebra
Dieser Abschnitt beschreibt die folgenden Inhalte. · Bedingte Wahrscheinlichkeit ・ Bayes-Theorem ・ Bernoulli-Verteilung ・ Binäre Verteilung ・ Multi-Nooy (kategorial) Verteilung ・ Mehrzeitverteilung
In Bezug auf die Wahrscheinlichkeitsverteilung ist die folgende Site sehr einfach zu verstehen und ich habe sie als Referenz verwendet. <a href="http://machine-learning.hatenablog.com/entry/2016/03/26/211106"_blank> Zusammenfassung der komplizierten diskreten Verteilung
Stellen Sie sich den Fall vor, in dem zwei Personen, A und B, für jede von drei von zehn Personen eine Lotterie ziehen. Nachdem ich die Lotterie gezogen habe, werde ich sie zurücklegen.
Die Trefferwahrscheinlichkeit wird als $ P (A) $ ausgedrückt, die Verlustwahrscheinlichkeit wird als $ P (\ override {A}) $ ausgedrückt und das Ben-Diagramm und die Tabelle werden wie folgt zusammengefasst.
Wenn zu diesem Zeitpunkt die bedingte Wahrscheinlichkeit, dass A einen Treffer zieht und B auch einen Treffer zieht, auf $ P (B \ mid A) $ gesetzt ist,
P(B \mid A) =\frac{P(A∩B)}{P(A)}・ ・ ・(6)
Es wird sein. Es ist ein Bild der folgenden Abbildung.
- Die gleichzeitige Wahrscheinlichkeit $ P (A∩B) $, dass A und B gleichzeitig gelten, ist das Bild in der folgenden Abbildung.
Die folgende Beziehung gilt auch für die bedingte Wahrscheinlichkeitsgleichung (6).
P(A \mid B) =\frac{P(A∩B)}{P(B)}・ ・ ・(7)
Der Satz von Bayes ist die Formel, die $ P (A∩B) $ aus (6) und (7) eliminiert.
P(B \mid A) =\frac{P(A \mid B) P(B)}{P(A)}・ ・ ・(8)
Die Nutzung wird separat aktualisiert.
Betrachten Sie ein Ereignis mit nur zwei Ergebnissen. Ein häufiges Beispiel ist, wenn Sie eine Münze werfen und versuchen, den Rücken herauszuholen, oder nur einmal. Unter der Annahme, dass die Wahrscheinlichkeit, auf der Vorderseite zu erscheinen, $ μ $ beträgt, werden die Wahrscheinlichkeiten der Vorder- und Rückseite unten zusammengefasst.
\left\{
\begin{array}{ll}
Wahrscheinlichkeit des Auftretens in der Tabelle μ= 0.5 \\
Wahrscheinlichkeit, hinter 1 zu kommen-μ = 0.5 \\
\end{array}
\right.
Wenn das Ereignis auf der Vorderseite der Münze $ X = 1 $ und das Ereignis auf der Rückseite $ X = 0 $ ist, ist die Wahrscheinlichkeitsverteilung des Münzwurfs von $ Bern (X \ mid μ) $
Bern(X \mid μ) =
μ^{X}(1-μ)^{1-X} \\(X=0,1)
Es wird sein. In der Grafik sieht es so aus.
bern.py
#Zeichnen der Bernoulli-Verteilung
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
mu = 0.5
x = np.array([0,1])
y = (mu**x)*(1-mu)**(1-x)
plt.scatter(x,y)
Auch der erwartete Wert $ E (X) = μ $ und die Varianz $ σ (X) = μ (1-μ) $.
Dies ist die Wahrscheinlichkeitsverteilung, wenn das Werfen von Münzen mehrmals wiederholt wird. Wirf eine Münze N-mal und erhalte eine Tabelle mit der m-fachen Binärverteilung $ Bin (m \ mid \ μ, N) $
Bin(m \mid\ μ,N)=\frac{N!}{m!(N-m)!}μ^{m}(1-μ)^{N-m}
Es wird sein.
Auch der erwartete Wert $ E (X) = Nμ $ und die Varianz $ σ (X) = Nμ (1-μ) $.
Eine Erweiterung der Bernoulli-Distribution. Betrachten Sie ein Ereignis mit n unterschiedlichen Ergebnissen. Ein häufiges Beispiel ist, wenn Sie einen Würfel werfen, um Ihren Wurf zu testen. Unter der Annahme, dass die Wahrscheinlichkeit, dass jedes Auge erscheint, $ μ_ {k} $ ist, ist die Mehrkernverteilung $ Cat (X \ mid \ textbf {μ}) $ wie folgt.
Cat(X\mid\textbf{μ})=\prod_{k=1}^{n}\mu_k^{X_{k}}
Eine Erweiterung der Martineuy-Distribution. Dies ist die Wahrscheinlichkeitsverteilung bei der Durchführung von N Ereignissen mit n unterschiedlichen Ergebnissen. Die Polynomverteilung $ Multi (\ textbf {m} \ mid \ textbf {μ}, N) $ ist wie folgt.
Multi(\textbf{m}\mid\textbf{μ},N)= \frac{N!}{m_{1}!...m_{k}!}\prod_{k=1}^{n}\mu_k^{m_{k}}
Die am häufigsten verwendete Distribution.
f(x) = \frac{1}{\sqrt{2\pi\sigma}}\exp{\left\{-\frac{(x-\mu)^2}{2\sigma^2}\right\}}
$ \ Mu $ ist durchschnittlich, $ \ sigma ^ {2} $ ist verteilt. Das Setzen von $ Z = (x- \ mu) / \ sigma $ ergibt eine Standardnormalverteilung.
f(x) = \frac{1}{\sqrt{2\pi}}\exp{\left\{-\frac{Z^2}{2}\right\}}
Definition der $ L_ {p} $ Norm
{\| {\bf x} \|_p = (\ |x_1|^p + |x_2|^p + \cdots + |x_n|^p )^{1/p}}
Es kommt im Kontext der Regularisierung heraus. Die $ L_ {2} $ -Norm wird auch als euklidischer Abstand bezeichnet, und die $ L_ {1} $ -Norm wird auch als Manhattan-Abstand bezeichnet. Es wird der Verlustfunktion als Gewichtsabnahme gegeben, um ein Überlernen zu verhindern. Maschinelles Lernen Was ist die LP-Norm? ](Https://qiita.com/kenmatsu4/items/cecb466437da33df2870) [DL] Was ist Gewichtsverlust?