Giảm kích thước loạt để phân loại Đầu vào


8

Tôi đang tìm cách xây dựng một mô hình dự đoán trong đó biến kết quả là nhị phân và đầu vào là chuỗi thời gian. Để làm cho nó cụ thể hơn, mô hình sẽ dự đoán nếu một khách hàng rời đi (rời công ty; mã hóa là 1 hoặc 0) dựa trên số tiền họ đã chi tiêu với công ty trong 60 ngày trước đó. Vì vậy, dữ liệu là một khách hàng mỗi hàng và các cột là một yếu tố kết quả (1 hoặc 0) và 60 cột bổ sung cho số tiền đã sử dụng trong thời gian t-1, t-2 .... t-60.

Dưới đây là một số dữ liệu ví dụ:

#create the data a series of length 60 and a class ID
sc <- read.table("http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.data", header=F, sep="")

#binary class lable
classId <- as.factor(c(rep(0,300), rep(1,300)))
newSc <- data.frame(cbind(classId, sc))
newSc$ID<-seq(1,600,1)

Mô hình thực tế có thể có nhiều chuỗi trong số này cho từng khách hàng, vì vậy tôi cần giảm tính chiều của dữ liệu cho chuỗi, ví dụ thay vì sử dụng 60 giá trị, tôi cần giảm số lượng này xuống một chút. Tất nhiên, tôi có thể sử dụng giá trị trung bình, tối thiểu, tối đa của bộ truyện nhưng tôi đã đọc về việc sử dụng Biến đổi Fourier rời rạc.

Câu hỏi:

  1. DFFT in R có phải là phương pháp thích hợp để sử dụng cho mục đích của tôi không? Bất kỳ thông tin về cách thức hoạt động sẽ được đánh giá cao.

  2. Giả sử hàm R này là chính xác, làm thế nào để bạn trích xuất chỉ các hệ số có ý nghĩa nhất để đạt được giảm kích thước?

THÊM: Dường như có sự đồng thuận rằng sử dụng DFFT để giảm kích thước không phải là một lựa chọn khôn ngoan, nhưng dường như trong khai thác dữ liệu, chức năng này, DWT và SVD đều được sử dụng phổ biến: Khai thác chuỗi thời gian bắt đầu từ trang 20.


một nhận xét nhanh tôi sẽ có là bạn có thể coi FFT như một phương tiện khác để có được các tính năng cho mỗi khách hàng. Giả sử bạn có một vectơ đặc trưng chứa số liệu thống kê tóm tắt dựa trên chuỗi thời gian của từng khách hàng và dữ liệu khác, bạn có thể bổ sung vectơ tính năng của mình bằng cách thêm các tính năng có nguồn gốc từ FFT. Hãy nhớ rằng nó chỉ thích hợp nếu cửa sổ mà bạn đang nói FFT đứng yên. Mặt khác, các tính năng thời gian như dẫn xuất thứ 1 và thứ 2 có thể phù hợp hơn.
BGreene

Câu trả lời:


12

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:

  1. Tín hiệu của bạn là định kỳ và
  2. 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

  1. 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,
  2. 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à
  3. 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.
  4. (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.


Chào Matt. Tôi đã đăng một bổ sung với một liên kết. Có vẻ như các kỹ thuật này được sử dụng để giảm kích thước. Bạn có biết làm thế nào để sử dụng biến đổi wavelet rời rạc trong R để làm giảm kích thước không?
B_Miner

Tôi đã thực hiện một số chỉnh sửa lớn; Tôi muốn đề nghị đọc bit cuối cùng trước!
Matt Krause

Đây là Matt tuyệt vời cảm ơn bạn! Tôi chưa có cơ hội đọc hết phản hồi của bạn nhưng tôi sẽ sớm thôi.
B_Miner

@MattKrause, bạn dường như hiểu rất rõ về biến đổi Fourier. Tôi có một vấn đề tương tự, trong đó tôi (dựa trên bài đăng của bạn ở đây) nghĩ rằng việc thực hiện biến đổi Fourier là một kỹ thuật giảm kích thước có ý nghĩa. Tuy nhiên, tôi không thể tìm ra cách thực hiện nó trong thực tế. Bạn có thể xem qua stats.stackexchange.com/questions/176283/ không?
cướp biển

Cảm ơn, @felbo! Tôi hãnh diện nhưng tôi không chắc mình có nhiều thứ để thêm.
Matt Krause

2

Như Matt đã nói, tôi không chắc DFT sẽ tạo ra các tính năng liên quan cho ứng dụng của bạn. Nhưng như bạn hỏi trong câu hỏi này , đây là mã R để xây dựng các tính năng cho các lượng tử của DFT của tín hiệu 1D x, sử dụng hàm detrend(ví dụ với gói pracma ).

l <- length(x)
detrended <- detrend(x)
dft <- fft(detrended)/l
amplitude <- 2*abs(dft[1:l/2])
plot(amplitude, type='l')
quantiles <- quantile(amplitude)

1

Tôi hoàn toàn không sử dụng FFT ở đây trừ khi bạn có một số mô hình cho thấy đó là điều đúng đắn và, từ thông tin bạn đã cung cấp, tôi không thấy bất kỳ lý do nào để tin rằng chỉ cần nhìn vào FFT của dữ liệu của bạn là phù hợp. Tôi đề nghị thay vì nhìn vào FFT, có khả năng là ngõ cụt, hãy xem xét các phương pháp khác.

Các phương pháp phù hợp hơn có thể là bộ lọc trung bình di chuyển (ví dụ: doanh số trung bình trong N ngày qua) hoặc bộ lọc trung bình di chuyển có trọng số (tương tự ngoại trừ trọng số được trao cho các giá trị được cho là có ý nghĩa hơn, bởi vì bạn có một mô hình / giả thuyết hỗ trợ điều này hoặc dữ liệu thực tế chỉ ra rằng đây là quá khứ. Ví dụ: bạn có thể cân nhắc các số liệu gần đây hơn hoặc bạn có thể cân dữ liệu từ thứ hai vì bạn có dữ liệu cho thấy doanh số bán hàng thứ hai là dự đoán cho một số lý do).

Một cách tiếp cận khác có thể chỉ đơn giản là sử dụng hồi quy (đặc biệt là hồi quy logistic). Điều này có vẻ truyền thống và nhàm chán, nhưng nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.