Họ kỳ thị trăn

[Fishers] Phân tích phân biệt tuyến tính [LDA] tìm kiếm phép chiếu của tập dữ liệu giúp tối đa hóa tỷ lệ *giữa phân tán lớp với tỷ lệ phân tán bên trong lớp* [$\frac{S_B}{S_W}$] của tập dữ liệu dự kiến ​​này. Mục tiêu là chiếu/chuyển đổi tập dữ liệu $A$ bằng cách sử dụng ma trận biến đổi $w$ sao cho tỷ lệ phân tán giữa phân tán lớp với phân tán bên trong lớp của tập dữ liệu được chuyển đổi $Y=w^T*A$ là tối đa. Do đó, mục tiêu của chúng tôi là tìm ma trận chuyển đổi $w$ thực hiện điều này. Theo thuật ngữ của Fisher

*"Tìm tổ hợp tuyến tính $Z=a^T*X$ sao cho phương sai giữa các lớp được cực đại hóa so với phương sai bên trong lớp. "* [Hastie, Tibshirani và Friedman, 2008, p. 114]. Như vậy, LDA cũng giống như PCA mà chúng tôi đã giới thiệu ở chương trước với điểm khác biệt là LDA nhằm tìm phép chiếu của khả năng tách lớn nhất. Nhưng chậm. Xem xét hình minh họa sau đây cho thấy một tập dữ liệu bao gồm ba lớp khác nhau. Bây giờ chúng tôi muốn có sự phân tán bên trong và giữa các lớp của tập dữ liệu này

vi vậy lam cach nao để chung ta đên đo?

Toán học đằng sau LDA

Như chúng ta có thể thấy trong hình minh họa, chúng ta muốn có một phép đo phân tán bên trong và giữa các lớp. Do đó, chúng tôi sử dụng hai công thức sau đây cho phân tán giữa lớp $S_B$ và phân tán bên trong lớp $S_W$. Hãy rút ra ý nghĩa của chúng

$\gạch chân{1. \ \ Phân tán \ \ Trong vòng \ \ [S_W]}$

$S_W=\sum\limits_{các lớp \ \ c} \ \ \sum\limits_{j \in c}[x_j-\mu_c][x_j-\mu_c]^T$

Ở đây $classes \ \ c$ là [trong trường hợp của chúng ta] ba lớp khác nhau [hình chữ nhật, hình tam giác và hình tròn]. $\boldsymbol{x_j}$ là vectơ giá trị cho mỗi phiên bản trên mỗi lớp [trong trường hợp của chúng tôi, chúng tôi có hai chiều x và y, vì vậy, ví dụ $x_1$ có chiều 2x1]. $\boldsymbol{\mu_c}$ đại diện cho vectơ trung bình của lớp $c$ và là một vectơ chứa các giá trị của từng thứ nguyên cho mỗi lớp. Do đó, nếu chẳng hạn, lớp 1 có hình dạng 2x15 [15 giá trị và hai chiều], thì vectơ trung bình của lớp 1 có hình dạng 2x1 và do đó chúng ta có thể trừ $\boldsymbol{\mu_c}$ khỏi $\boldsymbol x_j $. Chúng tôi muốn có thuật ngữ này càng nhỏ càng tốt vì các điểm dữ liệu trên mỗi lớp càng gần nhau thì càng dễ tách lớp này khỏi các lớp khác

Vì vậy, nói một cách hình tượng, chúng tôi tính toán ma trận phân tán trên mỗi lớp $c$ để có được sự phân tán trong mỗi lớp [trong hình tam giác, hình chữ nhật và hình tròn --> Vì vậy, chúng tôi tính toán $[x_j-\mu_c][x_j-\mu_c] ^T$ cho mỗi $j$ dành cho mỗi phiên bản, cung cấp cho chúng tôi một ma trận $mxm$ cho mỗi phiên bản $x_j$ giả định rằng mỗi $x_j$ có thứ nguyên $mx1$ trong đó $m$ là số đối tượng trong tập dữ liệu. Sau đó, chúng tôi tổng hợp tất cả các ma trận này để có được phân tán trong mỗi lớp] và lần thứ hai tổng hợp các ma trận phân tán này để nhận được thước đo phân tán trong toàn bộ tập dữ liệu $S_W$

Xin lưu ý rằng chúng tôi đã tính toán ma trận phân tán chứ không phải ma trận hiệp phương sai vì sau đó chúng tôi phải chia cho n tương ứng n-1 nhưng chúng tôi đã không làm điều đó ở đây. Tuy nhiên, số chiều của ma trận tán xạ giống như đối với ma trận hiệp phương sai. Khi một lớp có 2 chiều, ma trận phân tán có dạng [2x2] và bao gồm các phần tử

$\bắt đầu{bmatrix} phân tán_{xx} & phân tán_{xy} \\ phân tán_{yx} & phân tán_{yy} \end{bmatrix} $

Như đã nói, chúng tôi tính toán độ phân tán trên mỗi lớp và sau đó tổng hợp tất cả các ma trận phân tán trên mỗi lớp để nhận được thước đo cho độ phân tán trong [$S_W$]

Phân tích phân biệt tuyến tính là một kỹ thuật giảm kích thước để giải quyết các vấn đề về đa phân loại. Nó cũng đã được sử dụng cho hầu hết các vấn đề phân loại được giám sát. Nó cung cấp một phương pháp để tìm sự kết hợp tuyến tính giữa các tính năng của các đối tượng hoặc lớp. Chúng ta có thể hiểu rõ hơn điều này bằng cách phân tích các bước liên quan đến quá trình phân tích này

Cũng đọc. Thuật toán phân bổ Dirichlet tiềm ẩn [LDA] trong Python

  • Tính toán Phương tiện của các tính năng của các lớp khác nhau
  • Tính toán trong lớp Scatter và giữa lớp Scatter

Ma trận lớp phân tán được xác định theo công thức

Trong đó c là tổng số không. của các lớp và

,
trong đó Xk là mẫu và n là không. của mẫu.

Ma trận phân tán giữa các lớp được xác định bởi

;
and

  • Tính giá trị Eigen và vectơ Eigen bằng thuật toán
  • chuyển đổi ma trận sinto giá trị riêng và vectơ riêng
  • một khi ma trận được hình thành, nó có thể được sử dụng để phân loại và giảm kích thước

Hãy giả sử chúng ta đang có hai lớp tính năng khác nhau vì chúng ta biết việc phân loại hai lớp này chỉ bằng một tính năng duy nhất là khó. Vì vậy chúng ta cần tối đa hóa các tính năng để việc phân loại của chúng ta dễ dàng hơn. Đó cũng là mục tiêu của chúng tôi trong chủ đề này

Các ứng dụng của phân tích biệt thức tuyến tính

Chúng ta hãy xem các ứng dụng của phân tích biệt thức tuyến tính

  • Phân loại chẳng hạn như phân loại email là thư rác, nhập hoặc bất kỳ thứ gì khác
  • Thực hiện công nhận
  • Quét mã vạch và mã QR
  • Nhận dạng khách hàng bằng Trí tuệ nhân tạo trong các nền tảng mua sắm
  • Quyết định
  • Dự đoán dự đoán tương lai

Chúng ta có thể hiểu rõ hơn điều này bằng cách tạo một mô hình và sử dụng cùng một. Chúng tôi đang lấy tập dữ liệu được tải sẵn của mình trong python, đây là tập dữ liệu của nhà hóa sinh. Chúng tôi sẽ phân loại tình trạng hôn nhân dựa trên các đặc điểm trong tập dữ liệu này

Triển khai thuật toán phân tích phân biệt tuyến tính trong Python

Để làm như vậy, từ tập dữ liệu này, chúng tôi sẽ tìm nạp một số dữ liệu và tải nó vào các biến của chúng tôi dưới dạng độc lập và phụ thuộc tương ứng. sau đó chúng tôi cũng sẽ áp dụng phân tích phân biệt tuyến tính để giảm kích thước của các biến đó và vẽ biểu đồ tương tự trong biểu đồ. Hãy làm theo đoạn mã của chúng tôi dưới đây

Bước 1. Nhập mô-đun

import pandas as pd
from pydataset import data
from matplotlib import pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn import metrics

Trong đoạn mã trên, chúng tôi cũng đã nhập các mô-đun cần thiết của mình. trong trường hợp nó hiển thị bất kỳ lỗi nào trong khi nhập các mô-đun hoặc thư viện ở trên, bạn có thể cài đặt chúng theo cách thủ công trong dấu nhắc lệnh bằng trình cài đặt pip của bạn

Bước 2. Đang tải tập dữ liệu

Trong mã của chúng tôi hôm nay, chúng tôi sẽ sử dụng tập dữ liệu được tải sẵn để làm việc trên. Chúng tôi sẽ tìm nạp tập dữ liệu và tải tập dữ liệu đó vào khung dữ liệu df. Hãy xem nhanh các mã bên dưới

#loading our preloaded dataset into a dataframe df
df = data['bioChemists']

#printing our dataframe
df.head[]

Bước 3. Gán giá trị cho biến độc lập và biến phụ thuộc tương ứng

Chúng tôi sẽ gán một số giá trị hoặc dữ liệu cho các biến độc lập và phụ thuộc của chúng tôi tương ứng. Trước khi làm như vậy, chúng tôi sẽ tạo các cột của một số dữ liệu cần thiết và thêm tất cả chúng vào khung dữ liệu của chúng tôi để phân tích tốt

#creating columns for each value in fem and assigning 1 for positve and 0 for negative
dummy = pd.get_dummies[df['fem']]
#adding the resultant icolumns to our dataframe using concat[] method
df = pd.concat[[df, dummy], axis = 1]

#repeat the same for the values of mar columns
dummy = pd.get_dummies[df['mar']]
df = pd.concat[[df, dummy], axis = 1]

#independent variable
x = df[['Men', 'kid5', 'phd', 'ment', 'art']]

#dependent variable
y = df['Married']

Bước 4. tách

Chúng ta sẽ sử dụng phương thức train_test_split[] để phân chia các mảng và số liệu thành các tập con dữ liệu tương ứng dưới dạng các chuyến tàu và các bài kiểm tra [mảng 2-D thành Tuyến tính]. Chúng tôi đã sử dụng tham số random_state=0 để nhận cùng một tập huấn luyện và kiểm tra sau mỗi lần thực hiện

Chúng tôi đã vượt qua test_size=0.3, nghĩa là 30% dữ liệu sẽ nằm trong tập kiểm tra và phần còn lại sẽ nằm trong tập huấn luyện

x_train, x_test, y_train, y_test = train_test_split[x, y, test_size = 0.3, random_state = 0]

Bước 5. Tạo mô hình

Chúng tôi sẽ tạo mô hình linear_discriminantanalysis theo yêu cầu của mình và chúng tôi sẽ kiểm tra tính chính xác của nó xem nó có hoạt động không

#creating our linear discrimanant analysis model 
clf = LinearDiscriminantAnalysis[]

#checking for the model accuracy using score method
clf.fit[x_train, y_train].score[x_train, y_train]

Bước 6. ROC [Đặc điểm hoạt động của máy thu]

Đường cong ROC [Đặc điểm hoạt động của máy thu] là biểu đồ thể hiện hiệu suất của mô hình phân loại ở tất cả các mức ngưỡng

Đường cong này vẽ hai tham số. Tỷ lệ tích cực thực sự. Tỷ lệ tích cực sai

Hàm bên dưới tính toán Đặc điểm hoạt động của bộ thu bằng cách sử dụng hai kích thước đã giảm. Thay vì vẽ đồ thị các biến suy giảm tuyến tính, chúng tôi sẽ chỉ vẽ đồ thị đường cong ROC cho cùng

fpr, tpr, threshold = metrics.roc_curve[y_test, y_pred]

#calculating area under the curve[AUC]
auc = metrics.auc[fpr, tpr]
auc

Bước 7. Vẽ dữ liệu bằng pyplot

Bây giờ, chúng tôi sẽ vẽ đường cong Đặc tính hoạt động của máy thu cho Tỷ lệ dương thực và tỷ lệ dương giả thu được từ các thứ nguyên đã giảm cho cả biến phụ thuộc và biến độc lập tương ứng

#plotting our ROC curve using above terminologies
plt.title["Linear Discriminant Analysis"]

plt.clf[]

#plotting for roc curve
plt.plot[fpr, tpr, color="navy", linestyle="--", label = "roc_curve = %0.2f"% auc]
plt.legend[loc = "upper center"]

#assigning the axis values
plt.plot[[0,1.5], [0,1.5], ls = '-', color="red"]

plt.xlabel["False Positive Rate"]
plt.ylabel["True Positive Rate"]

Tóm lược

Hôm nay chúng tôi đã đề cập đến một mẫu Mô hình phân tích phân biệt tuyến tính mẫu. Hy vọng các bạn đã học nó với đoạn mã của chúng tôi. Chúng ta phải ghé thăm lại với một số chủ đề thú vị

Chủ Đề