Chúng tôi đã không giải thích các chức năng movie_norm. Chức năng này thực hiện một bộ phimbình thường hóa: một số phim chỉ nói chung tốt hơn và nhận được cao hơn trung bình là nhãn hiệu:def movie_norm(x):XC = x.copy().toarray()Chúng tôi không thể sử dụng xc.mean(1) bởi vì chúng tôi không muốn có các số không đếm chocó nghĩa là. Chúng tôi chỉ muốn có nghĩa là xếp hạng mà thực sự đã được đưa ra:x 1 = np.array ([xi [xi > 0].mean() cho xi trong xc])Trong một số trường hợp, có là không có đánh giá và chúng tôi đã nhận một giá trị NaN, do đó, chúng tôi thay thế nó vớiZero bằng cách sử dụng np.nan_to_num, mà thực hiện chính xác công việc này:x 1 = np.nan_to_num(x1)Bây giờ chúng tôi bình thường hóa các đầu vào bằng cách loại bỏ giá trị trung bình từ khác 0mục:cho tôi tại xrange(xc.shape[0]):XC [i]-= (xc [i] > 0) * 1 x [i]Ngầm, điều này cũng làm cho những bộ phim mà người dùng đã không đánh giá có giá trịZero, đó là trung bình. Cuối cùng, chúng tôi trở lại bình thường mảng và các phương tiện:trở lại x, x 1Bạn có thể thấy rằng chúng tôi chuyển đổi sang một mảng (dày đặc) thường xuyên. Điều này có cácthêm lợi thế là nó làm cho việc tối ưu hóa nhanh hơn nhiều: trong khi scikit-tìm hiểuhoạt động tốt với các giá trị thưa thớt, mảng dày đặc nhanh hơn nhiều (nếu bạn có thể phù hợp vớichúng trong bộ nhớ; Khi bạn không thể, bạn buộc phải sử dụng thưa thớt mảng).
đang được dịch, vui lòng đợi..
