在 sklearn 和 pandas 中将字符串特征转换为数字特征
Convert string features to numeric features in sklearn and pandas
我目前正在使用 sklearn(我是初学者),我想训练和测试一个非常简单的分类器。
我的训练和测试数据结构如下:
----|----|----|----|----|----|------|----|----|----|-------
f1 | f2 | f3 | c1 | c2 | c3 | word | c4 | c5 | c6 | label
----|----|----|----|----|----|------|----|----|----|-------
其中:
f1: feature 1, binary numerical type like 0
f2: feature 2, binary numerical type like 1
f3: feature 3, binary numerical type like 0
c1: context 1, string type like "from"
c2: context 2, string type like "this"
c3: context 3, string type like "website"
word: central word (string) of the context like "http://.."
c4: context 4, string type
c5: context 5, string type
c6: context 6, string type
label: this is the label (string) that the classifier has to train and predict like: "URL" (I have only three types of label: REF,IRR,DATA)
我想做的是将我的上下文字符串特征转换为数值特征。每个字符串字段最多由一个单词组成。
主要目标是为每个上下文和单词字符串分配一个数值,以使系统正常工作。
我认为可以定义一个词汇表:
{ from, website, to, ... }
并将这个词汇表提供给 DictVectorizer,但我现在不知道该怎么做。
我真正想做的是生成大量二元特征:紧接在相关单词之前的单词“from”是一个特征; “可用”一词后两个位置是另一个词。但是我真的不知道怎么办。
这是我尝试做的:
#I tried to read the train csv:
train = pd.read_csv('train.csv')
#Drop the label field:
train_X = train.drop(['label'],axis=1)
#Take the other parameters:
train_y = train.label.values
#Then I convert the panda's data type into a dictionary:
train_X = train_X.to_dict('r')
#And I tried to vectorize everything:
vec = DictVectorizer()
train_X = vec.fit_transform(train_X).toarray()
显然没有用。这是因为上下文和单词字段可以是一个非常大的单词,例如 url.
有什么建议吗?我接受各种解决方案。
非常感谢。
如果独特的词是有限的,你可以使用 pandas 来做这样的事情。
mapping_dict = {'word1':0,
'word2':1,
'word3':3 }
df[col] = df[col].str.map(mapping_dict)
我目前正在使用 sklearn(我是初学者),我想训练和测试一个非常简单的分类器。
我的训练和测试数据结构如下:
----|----|----|----|----|----|------|----|----|----|-------
f1 | f2 | f3 | c1 | c2 | c3 | word | c4 | c5 | c6 | label
----|----|----|----|----|----|------|----|----|----|-------
其中:
f1: feature 1, binary numerical type like 0
f2: feature 2, binary numerical type like 1
f3: feature 3, binary numerical type like 0
c1: context 1, string type like "from"
c2: context 2, string type like "this"
c3: context 3, string type like "website"
word: central word (string) of the context like "http://.."
c4: context 4, string type
c5: context 5, string type
c6: context 6, string type
label: this is the label (string) that the classifier has to train and predict like: "URL" (I have only three types of label: REF,IRR,DATA)
我想做的是将我的上下文字符串特征转换为数值特征。每个字符串字段最多由一个单词组成。
主要目标是为每个上下文和单词字符串分配一个数值,以使系统正常工作。 我认为可以定义一个词汇表:
{ from, website, to, ... }
并将这个词汇表提供给 DictVectorizer,但我现在不知道该怎么做。
我真正想做的是生成大量二元特征:紧接在相关单词之前的单词“from”是一个特征; “可用”一词后两个位置是另一个词。但是我真的不知道怎么办。
这是我尝试做的:
#I tried to read the train csv:
train = pd.read_csv('train.csv')
#Drop the label field:
train_X = train.drop(['label'],axis=1)
#Take the other parameters:
train_y = train.label.values
#Then I convert the panda's data type into a dictionary:
train_X = train_X.to_dict('r')
#And I tried to vectorize everything:
vec = DictVectorizer()
train_X = vec.fit_transform(train_X).toarray()
显然没有用。这是因为上下文和单词字段可以是一个非常大的单词,例如 url.
有什么建议吗?我接受各种解决方案。
非常感谢。
如果独特的词是有限的,你可以使用 pandas 来做这样的事情。
mapping_dict = {'word1':0,
'word2':1,
'word3':3 }
df[col] = df[col].str.map(mapping_dict)