[英]Extract integers from strings
我想從數據集的每個實例的類名稱(標簽)列表中創建具有多個類的聚類問題的目標列表。
class_name = ['class_1','class_2','class_3','class_3','class_1','class_2',\
'class_2','class_1','class_1','class_2','class_1','class_3']
目標列表應類似於長度與class_name列表相同的數組,其中將整數分配給不同的類標簽。 哪種投注方式可以做到這一點?
target = np.array([1, 2, 3, 3, 1, 2, 2, 1, 1, 2, 1, 3])
類標簽(例如class_1)的格式為“ Xx_xx_xxx(A123)”或“ Xx_xx_xxx(A123)”。 括號中的文字不固定。 列表類型為'unicode' 。
您可以使用列表split
將字符串split
為'_'
字符,將數字從索引[1]
轉換為int
>>> target = np.array([int(i.split('_')[1]) for i in class_name])
>>> target
array([1, 2, 3, 3, 1, 2, 2, 1, 1, 2, 1, 3])
您應該做的第一件事就是以標准格式獲取類。 根據上面的描述,如果類名位於字符串的括號內,則可以使用正則表達式來獲取類名。
import re
X = ['abc(class_1)', 'cde_(class_1)', 'def_(class_2)']
just_classes = [re.findall(r'\((.*)\)', thing)[0] for thing in X]
# ['class_1', 'class_1', 'class_2']
您可以在此處使用幾種不同的方法。 如果您正在使用numpy,scipy堆棧進行ml處理,建議您學習sklearn庫。 它具有許多有用的機器學習和AI工具,包括編碼類名。
from sklearn.preprocessing import LabelEncoder
class_names = ['class_1','class_2','class_3','class_3','class_1','class_2',\
'class_2','class_1','class_1','class_2','class_1','class_3']
my_enc = LabelEncoder()
my_enc.fit(class_names)
encoded1 = my_enc.transform(class_names)
classes = set(class_names)
d = {c:i for i,c in enumerate(classes)}
encoded2 = [d[c_name] for c_name in class_names]
print encoded1 #approach 1 gives numpy array
print encoded2 # approach 2 gives standard python list
兩種方法都應該起作用。 自己實現的代碼並不多,但是總體而言,我建議您看一下sklearn 預處理工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.