संक्षिप्त जवाब
यहाँ एक कार्य हॉट-एन्कोडिंग करने के लिए किया गया है जिसमें सुन्न, पांडा या अन्य पैकेज का उपयोग किए बिना । यह पूर्णांक, बूलियन या स्ट्रिंग्स (और शायद अन्य प्रकार भी) की एक सूची लेता है।
import typing
def one_hot_encode(items: list) -> typing.List[list]:
results = []
# find the unique items (we want to unique items b/c duplicate items will have the same encoding)
unique_items = list(set(items))
# sort the unique items
sorted_items = sorted(unique_items)
# find how long the list of each item should be
max_index = len(unique_items)
for item in items:
# create a list of zeros the appropriate length
one_hot_encoded_result = [0 for i in range(0, max_index)]
# find the index of the item
one_hot_index = sorted_items.index(item)
# change the zero at the index from the previous line to a one
one_hot_encoded_result[one_hot_index] = 1
# add the result
results.append(one_hot_encoded_result)
return results
उदाहरण:
one_hot_encode([2, 1, 1, 2, 5, 3])
# [[0, 1, 0, 0],
# [1, 0, 0, 0],
# [1, 0, 0, 0],
# [0, 1, 0, 0],
# [0, 0, 0, 1],
# [0, 0, 1, 0]]
one_hot_encode([True, False, True])
# [[0, 1], [1, 0], [0, 1]]
one_hot_encode(['a', 'b', 'c', 'a', 'e'])
# [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 0], [0, 0, 0, 1]]
दीर्घ (er) उत्तर
मुझे पता है कि इस प्रश्न के पहले से ही बहुत सारे उत्तर हैं, लेकिन मैंने दो बातों पर ध्यान दिया। सबसे पहले, अधिकांश उत्तर संख्यात्मक और / या पांडा जैसे संकुल का उपयोग करते हैं। और यह एक अच्छी बात है। यदि आप उत्पादन कोड लिख रहे हैं, तो आपको संभवत: मजबूत, तेज एल्गोरिदम का उपयोग करना चाहिए जैसे कि खस्ता / पांडा पैकेज में प्रदान किया गया है। लेकिन, शिक्षा के लिए, मुझे लगता है कि किसी को एक ऐसा उत्तर प्रदान करना चाहिए जिसमें पारदर्शी एल्गोरिथ्म हो, न कि किसी और के एल्गोरिदम का कार्यान्वयन हो। दूसरा, मैंने देखा कि बहुत से उत्तर एक-गर्म एन्कोडिंग का एक मजबूत कार्यान्वयन प्रदान नहीं करते हैं क्योंकि वे नीचे की आवश्यकताओं में से एक को पूरा नहीं करते हैं। नीचे एक उपयोगी, सटीक और मजबूत एक-गर्म एन्कोडिंग फ़ंक्शन के लिए कुछ आवश्यकताएं (जैसा कि मैं उन्हें देखता हूं) हैं:
एक-गर्म एन्कोडिंग फ़ंक्शन को होना चाहिए:
- इनपुट के रूप में विभिन्न प्रकारों (जैसे पूर्णांक, स्ट्रिंग्स, फ्लोट्स, आदि) की सूची
- डुप्लिकेट के साथ एक इनपुट सूची को संभालें
- इनपुट्स के अनुरूप (समान क्रम में) सूचियों की सूची लौटाएं
- उन सूचियों की सूची लौटाएं जहां प्रत्येक सूची यथासंभव कम है
मैंने इस प्रश्न के कई उत्तरों का परीक्षण किया और उनमें से अधिकांश उपरोक्त आवश्यकताओं में से एक पर विफल रहे।
drop_first=True
साथ सेटिंगget_dummies