Tôi không chắc chắn rằng tôi sẽ phân loại một biến đổi Fourier là một kỹ thuật giảm chiều cho mỗi gia nhập , mặc dù bạn chắc chắn có thể sử dụng nó theo cách đó.
Như bạn có thể biết, một biến đổi Fourier chuyển đổi hàm miền thời gian thành biểu diễn miền tần số . Trong chức năng ban đầu, thường biểu thị thời gian: ví dụ: f (1) có thể biểu thị số dư tài khoản của ai đó vào ngày đầu tiên hoặc âm lượng của mẫu đầu tiên của bản ghi bài hát, trong khi f (2) cho biết số dư của ngày hôm sau / giá trị mẫu). Tuy nhiên, đối số trongF ( ω ) t ω F ( ωf( t )F( ω )tωF( ω) thường biểu thị tần số: F (10) cho biết mức độ tín hiệu dao động ở 10 chu kỳ / giây (hoặc bất kể đơn vị thời gian của bạn là gì), trong khi F (20) cho biết mức độ dao động nhanh gấp đôi. Biến đổi Fourier "hoạt động" bằng cách tái tạo tín hiệu ban đầu của bạn dưới dạng tổng trọng số của sin (bạn thực sự có "trọng số", thường được gọi là biên độ và "dịch chuyển", thường được gọi là pha, giá trị cho từng thành phần tần số). Bài viết trên wikipedia hơi phức tạp, nhưng có một loạt các hướng dẫn phong nha trôi nổi trên web.
Bản thân biến đổi Fourier không giúp bạn giảm bất kỳ chiều nào. Nếu tín hiệu của bạn có độ dài , bạn sẽ nhận được khoảng biên độ và pha trở lại (1), đây rõ ràng không phải là một khoản tiết kiệm lớn. Tuy nhiên, đối với một số tín hiệu, hầu hết các biên độ đó gần bằng 0 hoặc là một ưu tiên được biết là không liên quan. Sau đó, bạn có thể đưa ra các hệ số cho các tần số này, vì bạn không cần chúng để tái tạo tín hiệu, điều này có thể dẫn đến tiết kiệm đáng kể trong không gian (một lần nữa, tùy thuộc vào tín hiệu). Đây là những gì cuốn sách được liên kết được mô tả là "giảm kích thước."N / 2 N / 2NN/ 2N/ 2
Một đại diện Fourier có thể hữu ích nếu:
- Tín hiệu của bạn là định kỳ và
- Thông tin hữu ích được mã hóa theo chu kỳ của tín hiệu.
Ví dụ: giả sử bạn đang ghi lại các dấu hiệu sinh tồn của bệnh nhân. Tín hiệu điện từ EKG (hoặc âm thanh từ ống nghe) là tín hiệu có chiều cao (giả sử, hơn 200 mẫu / giây). Tuy nhiên, đối với một số ứng dụng, bạn có thể quan tâm nhiều hơn trong trái tim của đối tượng tốc độ , mà có khả năng là vị trí của đỉnh trong FFT, và do đó biểu diễn bởi một chữ số duy nhất.
Một hạn chế lớn của FFT là nó xem xét toàn bộ tín hiệu cùng một lúc - nó không thể cục bộ hóa một thay đổi trong nó. Ví dụ: giả sử bạn nhìn vào hệ số liên quan đến 10 chu kỳ / giây. Bạn sẽ nhận được các giá trị biên độ tương tự nếu
- Có tín hiệu dao động 10 Hz phù hợp, nhưng có kích thước vừa phải trong tín hiệu,
- Dao động đó lớn gấp đôi trong nửa đầu của tín hiệu, nhưng hoàn toàn không có trong nửa sau và
- Dao động hoàn toàn không có trong nửa đầu, nhưng lớn gấp đôi so với số 1 trong nửa thứ hai.
- (và như thế)
Tôi rõ ràng không biết nhiều về doanh nghiệp của bạn, nhưng tôi tưởng tượng đây có thể là những tính năng rất phù hợp. Một hạn chế lớn khác của FFT là nó hoạt động theo thang thời gian duy nhất. Ví dụ: giả sử một khách hàng ghé thăm doanh nghiệp của bạn một cách tôn giáo mỗi ngày: anh ta có "tần suất" 0,5 lượt truy cập / ngày (hoặc khoảng thời gian 2 ngày). Một khách hàng khác cũng có thể liên tục đến trong hai ngày liên tiếp, nghỉ hai ngày và sau đó truy cập lại cho hai lần tiếp theo. Về mặt toán học, khách hàng thứ hai "dao động" chậm gấp đôi so với khách hàng đầu tiên, nhưng tôi cá rằng hai người này có khả năng khuấy động như nhau.
Cách tiếp cận tần suất thời gian giúp khắc phục vấn đề này bằng cách nội địa hóa các thay đổi về cả tần suất và thời gian. Một cách tiếp cận đơn giản là FFT thời gian ngắn, phân chia tín hiệu của bạn thành các cửa sổ nhỏ, sau đó tính toán biến đổi Fourier của mỗi cửa sổ. Điều này giả định rằng tín hiệu đứng yên trong một cửa sổ, nhưng thay đổi trên chúng. Phân tích Wavelet là một cách tiếp cận mạnh mẽ hơn (và nghiêm ngặt về mặt toán học). Có rất nhiều hướng dẫn về Wavelet xung quanh - Wavelets for Kids quyến rũ được đặt tên là một nơi tốt để bắt đầu, ngay cả khi nó là một chút cho tất cả trừ những đứa trẻ thực sự thông minh nhất. Có một số gói wavelet cho R, nhưng cú pháp của chúng khá đơn giản (xem trang 3 của gói wavelettài liệu cho một). Bạn cần chọn một wavelet thích hợp cho ứng dụng của mình - điều này lý tưởng trông giống như sự biến động của sự quan tâm đến tín hiệu của bạn, nhưng một wavelet Morlet có thể là điểm khởi đầu hợp lý. Giống như FFT, chính biến đổi wavelet sẽ không giúp bạn giảm nhiều chiều. Thay vào đó, nó đại diện cho tín hiệu ban đầu của bạn là một hàm của hai tham số ("tỷ lệ", tương tự tần số và "dịch", gần giống với vị trí theo thời gian). Giống như các hệ số FFT, bạn có thể loại bỏ một cách an toàn các hệ số có biên độ gần bằng 0, điều này giúp bạn giảm một số chiều hiệu quả.
Cuối cùng, tôi muốn kết luận bằng cách hỏi bạn xem việc giảm kích thước có thực sự là điều bạn muốn ở đây không. Các kỹ thuật bạn đã hỏi về cơ bản là tất cả các cách để giảm kích thước dữ liệu trong khi bảo tồn dữ liệu một cách trung thực nhất có thể. Tuy nhiên, để có được hiệu suất phân loại tốt nhất, chúng tôi thường muốn thu thập và chuyển đổi dữ liệu để làm cho các tính năng có liên quan rõ ràng nhất có thể, trong khi loại bỏ mọi thứ khác.
Đôi khi, phân tích Fourier hoặc Wavelet chính xác là những gì cần thiết (ví dụ: biến tín hiệu EKG chiều cao thành giá trị nhịp tim đơn); đôi khi, bạn sẽ tốt hơn với các cách tiếp cận hoàn toàn khác nhau (di chuyển trung bình, đạo hàm, v.v.). Tôi khuyến khích bạn nên suy nghĩ kỹ về vấn đề thực tế của bạn (và thậm chí có thể động não với những người giữ chân khách hàng / bán hàng để xem họ có trực giác nào không) và sử dụng những ý tưởng đó để tạo ra các tính năng, thay vì mù quáng thử một loạt các biến đổi.