मैं एक आधारभूत मॉडल बनाने की कोशिश कर रहा हूं: कोसाइन समानता (उपयोगकर्ता-आधारित) के साथ KNNBasic। मैंने ट्रेन टेस्ट स्प्लिट किया है। मैं यहां यथासंभव विस्तृत रहूंगा।
रेटिंग डेटा प्रीप्रोसेसिंग:
sample_clean = sample.drop('Time', axis=1) #dropping time stamp
class MyDataset(dataset.DatasetAutoFolds):
#this function creates a surprise friendly dataset
#this function already has folds built into it for cross-validation
self.raw_sample = [(uid, pid, r, None) for (uid, pid, r) in zip(sample_clean['UserId'], sample_clean['ProductId'], sample_clean['Score'])]
self.reader = reader
मैं तब अपने पाठक को सहज करता हूं
reader = Reader(line_format = 'user item rating', rating_scale=(0,5))
मैं फिर अपने नमूना_क्लीन डेटाफ्रेम को एक आश्चर्यजनक अनुकूल डेटासेट में पार्स करता हूं
surprise_sample = MyDataset(sample_clean, reader)
मैं प्रारूप की जांच करता हूं:
type(surprise_sample)
मुझे का आउटपुट मिलता है
_main_.MyDataset
मैं raw_ratings का एक कॉलम बनाने और इसे sample_clean से निकालने के लिए आगे बढ़ता हूं:
raw_ratings = sample_clean.Score
इसके बाद, मैं एक ट्रेन सत्यापन विभाजन करता हूं जो ठीक काम करता है।
#test data
test_threshold = int(.85*len(sample_clean)
train_sample = sample_clean[:test_threshold]
test_raw_sample = sample_clean[test_thresholds:]
#ट्रेन डेटा
train_threshold = int(.8*len(train_sample))
validation_raw_sample = train_sample[train_threshold:]
train_raw_sample = train_sample[:train_threshold]
मैं फिर यह देखने के लिए जांच करता हूं कि मेरे ट्रेन परीक्षण विभाजन के दौरान कोई डेटा खो नहीं गया है:
len(train_raw_sample) + len(test_raw_sample) + len(validation_raw_sample)
#output is 5000 which is what I wanted
मुझे नीचे समस्या है, मैं एक आधारभूत मॉडल बना रहा हूं जो कोसाइन समानता के साथ KNNBasic है (उपयोगकर्ता-आधारित)
#cosine similarity
sim_cos = {'name': 'cosine', 'user_based': True}
#instantiate reader
basic_user = knns.KNNBasic(sim_options = sim_cos)
#fit the model
simcos_crossval_user = cross_validate(basic_user, sample_clean, measures=['rmse', 'mae'], cv=3, return_train_measure=True, n_jobs=-1, verbose=True)
कोड की यह आखिरी पंक्ति काम नहीं कर रही है, मुझे इसकी आउटपुट त्रुटि मिलती है:
AttributeError: 'DataFrame' object has no attribute 'raw_ratings'
कृपया मुझे यह पता लगाने में मदद करें कि मैं क्या गलत कर रहा हूं। धन्यवाद।
1 उत्तर
एक विकल्प है जिसे आप कस्टम डेटाफ्रेम को आश्चर्यजनक अनुकूल डेटासेट में पार्स करने का प्रयास कर सकते हैं:
reader = Reader(line_format = 'user item rating', rating_scale=(0,5))
कॉलम उपयोगकर्ता आईडी, आइटम आईडी और रेटिंग (उस क्रम में) के अनुरूप होना चाहिए:
data = Dataset.load_from_df(sample_clean [['userId', 'productId', 'Score']], reader)
आप अधिक विवरण यहां प्राप्त कर सकते हैं।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।