1- make_classification
构造虚拟数据集,主要通过n_samples,n_features, n_classes,weights来进行构建,后期可能会使用到n_redunant和n_informative等进行特征之间相关度的分析。
X,y=datasets.make_classification(
n_samples=2000,
n_features=10,#每个样本具有10个特征
n_informative=4,
n_redundant=1,
n_classes=2,
n_clusters_per_class=1,#每个类别有几个簇构成
weights=[0.1,0.9],#样本比例
flip_y=0.1,#应该是造成误差(引入噪声)的意思,样本之间标签交换
random_state=2019
)
df_all=pd.DataFrame(X)
df_all["y"]=y
#对数据做PCA降维
pca=PCA(n_components=2)
pca.fit(X)
X_pca=pca.transform(X)
df_X=pd.DataFrame(columns=["pca_a","pca_b","y"])
df_X.pca_a=X_pca[:,0]
df_X.pca_b=X_pca[:,1]
df_X.y=y
print(type(X_pca))
print(X.shape," --> ",X_pca.shape)
sns.lmplot(x="pca_a",y="pca_b",data=df_X,hue="y",fit_reg=False,markers=["o","x"],size=8,aspect=1.5,legend=True)
2- cnews
为10类中文文本数据集,在数据送入神经网络之前,需要将文本数据转为tensor格式。可以使用onehot形式,但是矩阵大小为n_word*n_review,如果使用最长句子长度,则为n_max_len*n_review。只选取前10000的词频排序的词,将句子对应的单词转为数字,同时n_max_length归一化,少于该长度则做补全,多于该长度,则做截断。使用字级别的,省去了分词以及OOV的问题。参考代码没有做stopwords的处理,依然取得了比较好的效果,后期详细学习。
3- imdb
imdb为英文数据,数据集中最长的句子长度为2494,长度中位数为178,众数为132,但最后选取归一化长度为256,经测试,256高于178的acc。在构建好word_to_id之后,需要注意添加"<PAD>","<UNK>"。
具体代码在 https://github.com/mathCrazyy/NLP_task.git
cnews目前代码有问题,待修正。
参考:
https://github.com/gaussic/text-classification-cnn-rnn
https://www.imooc.com/article/48072
待尝试部分:
特征选择: https://towardsdatascience.com/a-feature-selection-tool-for-machine-learning-in-python-b64dd23710f0