kaggle競賽題:
這裡將使用多種處理庫,對比一下python nlp領域各個庫的優缺點。
所有要用到的庫,讀入訓練/測試集,及介紹
import numpy as np
import pandas as pd
from sklearn.ensemble import randomforestregressor, baggingregressor
from nltk.stem.snowball import snowballstemmer
df_train = pd.read_csv('../input/train.csv', encoding="iso-8859-1")
df_test = pd.read_csv('../input/test.csv', encoding="iso-8859-1")
df_desc = pd.read_csv('../input/product_descriptions.csv')
檢視資料
看來不要做太多的複雜處理,我們於是直接合併測試/訓練集,以便於統一做進一步的文字預處理
所以我們統一化我們的文字內容,以達到任何term在我們的資料集中只有一種表示式的效果。
我們這裡用簡單的stem做個例子:(有興趣再選用其他預處理方式:去掉停止詞,糾正拼寫,去掉數字,去掉各種emoji,等等)
stemmer = snowballstemmer('english')
def str_stemmer(s):
return " ".join([stemmer.stem(word) for word in s.lower().split()])
def str_common_word(str1, str2):
return sum(int(str2.find(word)>=0) for word in str1.split())
df_all['search_term'] = df_all['search_term'].map(lambda x:str_stemmer(x))
df_all['product_title'] = df_all['product_title'].map(lambda x:str_stemmer(x))
df_all['product_description'] = df_all['product_description'].map(lambda x:str_stemmer(x))
一般屬於一種腦洞大開的過程,想到什麼可以加什麼。
當然,特徵也不是越豐富越好,稍微靠譜點是肯定的。
df_all['len_of_query'] = df_all['search_term'].map(lambda x:len(x.split())).astype(np.int64)
等等等等。。變著法子想出些數字能代表的features,一股腦放進來~
df_all = df_all.drop(['search_term','product_title','product_description'],axis=1)
**說得好,要把之前脫下的衣服再一件件穿回來
資料處理也是如此,搞完一圈預處理之後,我們讓資料重回原本的樣貌
分開訓練和測試集
df_train = df_all.loc[df_train.index]
df_test = df_all.loc[df_test.index]
記錄下測試集的id 留著上傳的時候 能對的上號
test_ids = df_test['id']
分離出y_train
y_train = df_train['relevance'].values
把原集中的label給刪去 否則就是cheating了
x_train = df_train.drop(['id','relevance'],axis=1).values
x_test = df_test.drop(['id','relevance'],axis=1).values
我們用個最簡單的模型:ridge回歸模型
from sklearn.ensemble import randomforestregressor
from sklearn.model_selection import cross_val_score
用cv結果保證公正客觀性;並除錯不同的alpha值
params = [1,3,5,6,7,8,9,10]
test_scores =
for param in params:
clf = randomforestregressor(n_estimators=30, max_depth=param)
test_score = np.sqrt(-cross_val_score(clf, x_train, y_train, cv=5, scoring='neg_mean_squared_error'))
畫個圖來看看:
大概6~7的時候達到了最優解
用我們測試出的最優解建立模型,並跑跑測試集
rf = randomforestregressor(n_estimators=30, max_depth=6)
rf.fit(x_train, y_train)
randomforestregressor(bootstrap=true, criterion='mse', max_depth=6,max_features='auto', max_leaf_nodes=none,
min_impurity_split=1e-07, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
n_estimators=30, n_jobs=1, oob_score=false, random_state=none,
verbose=0, warm_start=false)
y_pred = rf.predict(x_test)
pd.dataframe().to_csv('submission.csv',index=false)
雖然都是用的最簡單的方法,但是基本框架是很完整的。
後續可以嘗試修改/除錯/公升級的部分是:
文字預處理步驟: 你可以使用很多不同的方法來使得文字資料變得更加清潔
更好的回歸模型: 根據之前的課講的ensemble方法,把分類器提公升到極致
《tensorflowNLP》傳統自然語言處理方法
經典nlp的一般方法 傳統的特徵工程技術 1 詞袋 根據詞頻建立特徵表示。缺陷 沒有保留單詞順序,丟失上下文資訊。2 n gram 它將文字分解為由n個字母 單詞 組成的較小元素,字母級別表示的優點是在大型語料庫上詞彙量小得多 語言建模任務的經典方法 傳統方法的缺點 傳統nlp的預處理步驟迫使我們對...
r語言進行自然語言處理 開始進行自然語言處理
r語言進行自然語言處理 當今,大多數應用程式仍在處理來自結構化和半結構化源的資料的世界中工作。它們連線到sql資料庫以查詢資訊或顯示來自json或xml資料來源的資訊。許多應用程式仍避免從非結構化源 例如開放文字字段,富文字編輯器,資料庫clob 字元大物件 資料型別,社交 新聞流以及來自micro...
自然語言處理
自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...