2013-04-30 39 views
5

Tôi có một tập hợp các vectơ nhị phân trong đó mỗi vectơ đại diện cho một ngày chiếm dụng trong một ngôi nhà và bao gồm 48 phần tử (mỗi phần tử trong 30 phút trong ngày). Mỗi phần tử có thể là 1 nghĩa là ngôi nhà bị chiếm đóng và 0 cho ngôi nhà không bị chiếm đóng.Dự đoán vector dung lượng nhị phân từ lịch sử vectơ

Nhiệm vụ của tôi là dự đoán ngày hôm sau dựa trên lịch sử của cùng ngày (Thứ Hai từ lịch sử Thứ Hai, v.v.). Cho đến nay tôi đang sử dụng khoảng cách hamming để tìm 5 ngày tương tự nhất trong lịch sử và từ đó tôi tính toán xác suất của công suất làm trung bình của 5 số đó. Khi xác suất cao hơn một số X, trong trường hợp của tôi là 0,4, tôi dự đoán nó sẽ bị chiếm đóng.

Nhưng chắc chắn có một số cách hiệu quả hơn để thực hiện việc này, bất kỳ thuật toán nào có thể nắm bắt được xu hướng trong lịch sử?

+1

Cá nhân tôi chỉ sử dụng chế độ để tìm trạng thái chiếm đóng thường xuyên nhất trong lịch sử cho mỗi khoảng thời gian nửa giờ. Nếu bạn chỉ muốn sử dụng các trạng thái gần đây nhất, thì chỉ sử dụng các chế độ của chúng. Tôi cung cấp điều này chỉ để chỉ ra rằng bạn phải quyết định phương pháp tiếp cận dự đoán nào bạn muốn thực hiện, sau đó triển khai nó. Sử dụng các biện pháp phức tạp như Hamming khoảng cách không làm cho dự đoán tốt hơn trừ khi bạn có hỗ trợ lý thuyết (hoặc thực tế) vững chắc cho ý tưởng rằng việc sử dụng khoảng cách Hamming là cách tiếp cận đúng. Cùng một đối số áp dụng cho đề xuất của tôi để sử dụng chế độ. –

+0

Về cơ bản những gì tôi đang làm ở đây là lấy khối thường xuyên nhất nhưng tôi sử dụng khoảng cách hamming để chọn những ngày phù hợp nhất từ ​​những ngày trước dựa trên dữ liệu từ ngày liên tục. Vì vậy, tôi so sánh đầu ngày với sự khởi đầu của những ngày trước đó. Vì vậy, có một chút biện minh cho khoảng cách Hamming. Những gì tôi đang cố gắng làm là giống như tạo ra một ngày điển hình hoặc lâu hơn, đây là những gì tôi có nghĩa là bằng cách nắm bắt xu hướng. –

+0

thông tin khác có thể hữu ích, ví dụ: bản chất của số người dùng hoặc mùa có/các tháng nhất định trong năm có thể có các mẫu có thể dự đoán được hay không. –

Trả lời

0

Bạn có thể chỉ muốn lưu N ngày gần đây nhất và/hoặc chỉ định trọng số lớn hơn cho những ngày gần đây hơn. Nếu không, thuật toán sẽ không phản ứng đủ nhanh để thay đổi thói quen của người dùng.

Bạn cũng có thể nhận được kết quả tốt hơn nếu so sánh số người dùng theo khoảng thời gian thay vì theo bit vectơ - thường một ngôi nhà sẽ bị chiếm đóng/bỏ trống trong một khoảng thời gian lớn, thay vì ví dụ: luân phiên nhau mỗi nửa giờ. Điều này đặc biệt đúng vào các ngày trong tuần, nơi ngôi nhà sẽ bị bỏ trống trong tám (hoặc chín, hoặc mười) giờ bắt đầu vào buổi sáng và kéo dài đến tối; khoảng thời gian cho thuê vào buổi sáng sẽ là một yếu tố dự báo tốt cho khoảng thời gian giữa ngày (un), bởi vì nếu người cư ngụ rời đi làm việc sớm hay trễ thì có thể họ sẽ về nhà sớm hay muộn. Nếu họ vẫn còn ở nhà lúc 10:00 hoặc 11:00 thì có lẽ họ sẽ về nhà cả ngày (do bị ốm hoặc đi nghỉ). Bạn cũng có thể dễ dàng so sánh và lập chỉ mục các khoảng thời gian so với các bit bit - ví dụ: bạn có thể lưu trữ các ngày trong một interval tree (hoặc thay vào đó là một cây khoảng thời gian được chuyển đổi thành một sơ đồ trang web), với khoảng thời gian là khóa và (các) ngày làm giá trị, để nhanh chóng xác định những ngày nào chia sẻ khoảng thời gian lưu trú buổi sáng của ngày hiện tại.

Bạn sẽ cần hai cấu trúc dữ liệu: một loạt các cây khoảng thời gian (bản đồ), một cây mỗi ngày trong tuần, sử dụng khoảng trống buổi sáng làm khóa và tập hợp các ngày trước làm giá trị. Bộ sưu tập này sẽ cần tổng hợp (các) người dự phòng buổi tối; mức dự đoán cho bất kỳ khoảng thời gian nửa giờ nào là chế độ của những ngày trước có cùng khoảng thời gian lưu trú buổi sáng (vì vậy nếu bạn đã lưu trữ 7 ngày và 5 trong số đó dự đoán dung lượng tại thời điểm X, thì cấu trúc dữ liệu dự đoán thời gian sử dụng X). Bạn cũng sẽ cần một hàng đợi của tất cả các ngày trước đó, để bạn có thể loại bỏ những ngày lâu đời nhất khỏi các cây khoảng thời gian. (Thay vào đó, hãy chỉ định trọng số lớn hơn cho những ngày gần đây hơn, tuy nhiên, điều này là phức tạp hơn để thực hiện, vì bạn cũng cần giảm trọng số của những ngày cũ hơn.)

Bạn có thể thấy rằng bạn chỉ cần hai khoảng cách cây, một cho các ngày trong tuần và một cho ngày cuối tuần.

1

Cách tiếp cận của bạn có vẻ khá hợp lý (nó được gọi là K-lân cận gần nhất hoặc KNN), mặc dù tôi không chắc bạn đang sử dụng số liệu khoảng cách phù hợp (khoảng cách hamming cho đến ngày nay). Phương pháp của bạn khá nhạy cảm với cấu trúc chính xác của một ngày và có thể mất nhiều thời gian để thích ứng với những thứ như kỳ nghỉ, trong khi có lẽ quá nhạy cảm trong vài giờ đầu tiên trong một ngày.

Một thay đổi phương pháp của bạn mà tôi sẽ thử là xem xét 24 giờ trước thay vì "cho đến ngày nay" hoặc sử dụng cả hai phương pháp và tính trung bình kết quả. Ví dụ như phương pháp 24 giờ trước đó sẽ nhận được một kỳ nghỉ khá nhanh chóng, nhưng phương pháp ngày nay đến nay có thể bỏ lỡ một kỳ nghỉ nếu người dùng xảy ra chưa bao giờ có một ngày nghỉ vào thứ Tư hoặc thứ gì đó. Đây là một khái niệm tương tự như trò chơi này rock paper scissors, mà nhìn vào bốn ném cuối cùng của bạn để dự đoán kế tiếp.

Một thay đổi khác mà tôi muốn xem xét là chơi với trọng số trong tính toán khoảng cách hamming. Ví dụ: cân mỗi bit khớp với lambda^(-n), trong đó lambda là thông số bạn có thể điều chỉnh (bắt đầu bằng cái gì đó như 1.1) và n biểu thị số giờ trong quá khứ mà bit đại diện.

Bất kỳ thuật toán phân loại nào khác, như SVM, hồi quy logistic, rừng ngẫu nhiên, v.v. cũng sẽ hoạt động khá tốt. Các tính năng thêm vào vector đặc trưng:

  • ngày trong tuần
  • giờ
  • lấp đầy trung bình giờ này
  • lấp đầy trung bình ngày nay
  • lấp đầy trung bình này (ngày, giờ)
  • qua công suất N-grams (ví dụ: bit bit của N giờ trước) cho các giá trị khác nhau của N
  • là một ngày nghỉ?
  • giờ kể từ khi mặt trời mọc

Cuối cùng, đối với một người dùng mới, nó có thể sẽ mất một thời gian để có được đủ dữ liệu đào tạo, vì vậy bạn có thể muốn có hai mô hình: mô hình tổng thể dựa trên tất cả người dùng của bạn và một mô hình người dùng cá nhân. Sau đó bạn có thể cân trọng lượng đầu ra của hai mô hình, với trọng số trên mô hình người dùng tăng

+0

Tôi đồng ý với nhận xét về khoảng cách ham muốn rằng nó khá nhạy cảm với cấu trúc chính xác trong ngày. Tôi hơi không làm theo cách 'lambda^(- n)' sẽ cải thiện điều đó, về cơ bản những gì nó làm là giảm trọng lượng của giờ khi chúng đến trong ngày. Nhìn lại 24 giờ là một ý tưởng hay, tôi sẽ xem xét điều đó. Về các bộ phân loại tôi đã sử dụng chúng trong các ứng dụng khác nhau nhưng tôi không chắc chắn về cách sử dụng chúng trong môi trường liên tục thời gian. Điều này có nghĩa là để đào tạo họ sau mỗi nửa giờ một lần nữa? Khá nhiều, phải không? –

+0

'n' được cho là số giờ trước thời điểm hiện tại. Bằng cách đó, hai khoảng thời gian phù hợp với -10 giờ ít quan trọng hơn hai khoảng thời gian phù hợp với -1 giờ.Ví dụ nếu đó là 11 giờ sáng, sự khác biệt lúc 10 giờ sáng là quan trọng hơn nhiều so với sự khác biệt lúc 1 giờ sáng. Tôi không nghĩ rằng bạn cần một mô hình khác nhau cho từng thời gian trong ngày. Chỉ cần bao gồm mỗi 1/2 giờ như là một tính năng nhị phân trong vector tính năng (48 tính năng trong tổng số). một phân loại cây quyết định về cơ bản sẽ xây dựng một mô hình riêng biệt cho mỗi nửa giờ nếu nó xác định đó là điều tốt nhất để làm. – RecursivelyIronic