Cải thiện đặc trưng dùng cho phân loại

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

"Auditory envelope"

  • Làm trơn dữ liệu để tính "auditory envelope"
  • Liên quan đến tổng năng lượng âm thanh tại mỗi thời điểm

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Làm trơn theo thời gian

  • Thay vì lấy trung bình trên toàn bộ thời gian, ta có thể lấy trung bình cục bộ
  • Việc này gọi là làm trơn chuỗi thời gian
  • Loại bỏ nhiễu ngắn hạn, giữ lại xu hướng tổng quát
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Làm trơn dữ liệu

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Tính thống kê cửa sổ trượt

# Audio là một Pandas DataFrame
print(audio.shape)  
# (n_times, n_audio_files)
(5000, 20)  
# Làm trơn dữ liệu bằng cách lấy trung bình trượt trên cửa sổ 50 mẫu
window_size = 50
windowed = audio.rolling(window=window_size)
audio_smooth = windowed.mean()
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Tính "auditory envelope"

  • Trước tiên chỉnh lưu âm thanh, rồi làm trơn

      audio_rectified = audio.apply(np.abs)
      audio_envelope = audio_rectified.rolling(50).mean()
    
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Kỹ thuật đặc trưng với envelope

# Tính một số đặc trưng của envelope, mỗi âm thanh một giá trị
envelope_mean = np.mean(audio_envelope, axis=0)
envelope_std = np.std(audio_envelope, axis=0)
envelope_max = np.max(audio_envelope, axis=0)

# Tạo dữ liệu huấn luyện cho bộ phân loại
X = np.column_stack([envelope_mean, envelope_std, envelope_max])
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Chuẩn bị đặc trưng cho scikit-learn

X = np.column_stack([envelope_mean, envelope_std, envelope_max])
y = labels.reshape(-1, 1)
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cross validation cho phân loại

  • cross_val_score tự động hóa quy trình:
    • Tách dữ liệu thành tập huấn luyện / kiểm định
    • Fit mô hình trên dữ liệu huấn luyện
    • Chấm điểm trên dữ liệu kiểm định
    • Lặp lại quy trình này
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Dùng cross_val_score

from sklearn.model_selection import cross_val_score

model = LinearSVC()
scores = cross_val_score(model, X, y, cv=3) 
print(scores)
[0.60911642 0.59975305 0.61404035]
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Đặc trưng âm thanh: Tempogram

  • Ta có thể tóm tắt thông tin thời gian phức tạp hơn bằng các hàm dành cho chuỗi thời gian
  • librosa là thư viện tuyệt vời để làm đặc trưng âm thanh và chuỗi thời gian
  • Ở đây ta sẽ tính tempogram, ước lượng tempo của âm thanh theo thời gian
  • Có thể tính thống kê tóm tắt của tempo giống như với envelope
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Tính tempogram

# Import librosa và tính tempo của một mảng âm thanh 1-D
import librosa as lr
audio_tempo = lr.beat.tempo(y=audio, sr=sfreq, 
                            hop_length=2**6)
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cùng luyện tập nào!

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Preparing Video For Download...