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