将多个 Pandas 列添加到稀疏 CSR 矩阵
Adding Multiple Pandas Columns to Sparse CSR Matrix
所以我的问题是基于这个。
我有 Twitter 数据,我在其中提取了一元字符特征和正字法特征的数量,例如感叹号、问号、大写和小写。我想将正字法特征堆叠到转换后的一元字母特征中。这是我的代码:
X_train, X_test, y_train, y_test = train_test_split(tweet_df[['tweets', 'exclamation', 'question', 'uppercase', 'lowercase']], tweet_df['class'], stratify=tweet_df['class'],
test_size = 0.2, random_state=0)
count_vect = CountVectorizer(ngram_range=(1,1))
X_train_gram = count_vect.fit_transform(X_train['tweets'])
tfidf = TfidfTransformer()
X_train_gram = tfidf.fit_transform(X_train_gram)
X_train_gram = hstack((X_train_gram,np.array(X_train['exclamation'])[:,None]))
这行得通,但是我找不到用一行代码将其余列(问题、大写、小写)合并到堆栈中的方法。这是失败的尝试:
X_train_gram = hstack((X_train_gram,np.array(list(X_train['exclamation'], X_train['question'], X_train['uppercase'], X_train['lowercase']))[:,None])) #list expected at most 1 arguments, got 4
X_train_gram = hstack((X_train_gram,np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']])[:,None])) #expected dimension <= 2 array or matrix
X_train_gram = hstack((X_train_gram,np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values)[:,None])) #expected dimension <= 2 array or matrix
感谢任何帮助。
您在列表语法和 sparse.coo_matrix
创建方面遇到问题。
np.array(X_train['exclamation'])[:,None])
Series
到数组是1d,加上None,就变成了(n,1)
np.array(list(X_train['exclamation'], X_train['question'], X_train['uppercase'], X_train['lowercase']))[:,None]
这不是有效的列表语法:
In [327]: list(1,2,3,4)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-327-e06d60ac583e> in <module>
----> 1 list(1,2,3,4)
TypeError: list() takes at most 1 argument (4 given)
下一个:
np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']])[:,None])
对于多列,我们得到一个DataFrame;这使得一个二维数组;添加 None
,得到一个 3d 数组:
In [328]: np.ones((2,3))[:,None].shape
Out[328]: (2, 1, 3)
无法从 3d 数组创建 coo
矩阵。添加 values
不会改变任何事情。 np.array(dataframe)
等同于 dataframe.values
.
np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values)[:,None]
这有可能奏效:
hstack((X_train_gram, np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values))
尽管我建议写作
arr = np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values
M = sparse.coo_matrix(arr)
sparse.hstack(( X_train_gram, M))
它更具可读性,如果出现问题应该更容易调试。
所以我的问题是基于这个
我有 Twitter 数据,我在其中提取了一元字符特征和正字法特征的数量,例如感叹号、问号、大写和小写。我想将正字法特征堆叠到转换后的一元字母特征中。这是我的代码:
X_train, X_test, y_train, y_test = train_test_split(tweet_df[['tweets', 'exclamation', 'question', 'uppercase', 'lowercase']], tweet_df['class'], stratify=tweet_df['class'],
test_size = 0.2, random_state=0)
count_vect = CountVectorizer(ngram_range=(1,1))
X_train_gram = count_vect.fit_transform(X_train['tweets'])
tfidf = TfidfTransformer()
X_train_gram = tfidf.fit_transform(X_train_gram)
X_train_gram = hstack((X_train_gram,np.array(X_train['exclamation'])[:,None]))
这行得通,但是我找不到用一行代码将其余列(问题、大写、小写)合并到堆栈中的方法。这是失败的尝试:
X_train_gram = hstack((X_train_gram,np.array(list(X_train['exclamation'], X_train['question'], X_train['uppercase'], X_train['lowercase']))[:,None])) #list expected at most 1 arguments, got 4
X_train_gram = hstack((X_train_gram,np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']])[:,None])) #expected dimension <= 2 array or matrix
X_train_gram = hstack((X_train_gram,np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values)[:,None])) #expected dimension <= 2 array or matrix
感谢任何帮助。
您在列表语法和 sparse.coo_matrix
创建方面遇到问题。
np.array(X_train['exclamation'])[:,None])
Series
到数组是1d,加上None,就变成了(n,1)
np.array(list(X_train['exclamation'], X_train['question'], X_train['uppercase'], X_train['lowercase']))[:,None]
这不是有效的列表语法:
In [327]: list(1,2,3,4)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-327-e06d60ac583e> in <module>
----> 1 list(1,2,3,4)
TypeError: list() takes at most 1 argument (4 given)
下一个:
np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']])[:,None])
对于多列,我们得到一个DataFrame;这使得一个二维数组;添加 None
,得到一个 3d 数组:
In [328]: np.ones((2,3))[:,None].shape
Out[328]: (2, 1, 3)
无法从 3d 数组创建 coo
矩阵。添加 values
不会改变任何事情。 np.array(dataframe)
等同于 dataframe.values
.
np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values)[:,None]
这有可能奏效:
hstack((X_train_gram, np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values))
尽管我建议写作
arr = np.array(X_train[['exclamation', 'question', 'uppercase', 'lowercase']].values
M = sparse.coo_matrix(arr)
sparse.hstack(( X_train_gram, M))
它更具可读性,如果出现问题应该更容易调试。