1. 程式人生 > >2018.08.17任務---理解已給的比賽程式碼,即每一行程式碼是幹什麼用的

2018.08.17任務---理解已給的比賽程式碼,即每一行程式碼是幹什麼用的

任務:理解已給的比賽程式碼,即每一行程式碼是幹什麼用的。 比賽地址:“達觀杯”文字智慧競賽

'''
#匯入所需要的軟體包
'''
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
import time

time_start = time.time()
print("開始時間 :",time_start)
print("\n")

'''
# @程式碼功能簡介:從硬碟上讀取已經下載好的資料,,並進行簡單處理
# @知識點定位:資料預處理
'''
# #分割較大的CSV檔案
# chuck_train = pd.read_csv("./train_set.csv", chunksize=50000)
# for i, chuck in enumerate(chuck_train):
#     chuck.to_csv('train_out{}.csv'.format(i)) # i is for chunk number of each iteration

# df_train = pd.read_csv('./train_out0.csv')#讀取訓練集資料
df_train0 = pd.read_csv('./train_out0.csv')#讀取訓練集資料
df_train1 = pd.read_csv('./train_out1.csv')#讀取訓練集資料
df_train2 = pd.read_csv('./train_out0.csv')#讀取訓練集資料

#合併之前分割的資料
df_train = df_train0.append([df_train1,df_train2])

# #分割較大的CSV檔案
# chuck_test = pd.read_csv("./train_set.csv", chunksize=50000)
# for j, chuck in enumerate(chuck_test):
#     chuck.to_csv('test_out{}.csv'.format(j)) # j is for chunk number of each iteration

# df_test = pd.read_csv('./test_out.csv')#讀取測試集資料
df_test0 = pd.read_csv('./test_out0.csv')#讀取測試集資料
df_test1 = pd.read_csv('./test_out1.csv')#讀取測試集資料
df_test2 = pd.read_csv('./test_out2.csv')#讀取測試集資料
df_test = df_test0.append([df_test1,df_test2])

print(df_train.head())

# df_train.drop(columns = ['article','id'],inplace=True)#刪除訓練集中的article列和id列
# df_test.drop(columns = ['article'],inplace=True)#刪除測試集中的article列

'''
# @程式碼功能簡介:將資料集中的字元文字轉換成數字向量,以便計算機能夠進行處理
# @知識點定位:特徵工程
'''
vectorizer = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000)#初始化一個CountVectorizer物件
vectorizer.fit(df_train['word_seg'])#構建詞彙表
x_train = vectorizer.transform(df_train['word_seg'])#將每一篇文章轉為與其對應的一個特徵向量
x_test = vectorizer.transform(df_test['word_seg'])#將每一篇文章轉為與其對應的一個特徵向量

y_train = df_train['class']-1   #因為從0開始計數,所以要將原值-1

'''
# @程式碼功能簡介:訓練一個分類器
# @知識點定位:傳統監督學習演算法之線性邏輯迴歸
'''
lg = LogisticRegression(C=4,dual=True)  #初始化一個分類器
lg.fit(x_train,y_train)   #訓練這個分類器
'''
根據上面訓練好的分類器對測試集的每個樣本進行預測
'''
y_test = lg.predict(x_test)
# y_test0 = lg.predict(x_test0)
# y_test1 = lg.predict(x_test1)
# y_test2 = lg.predict(x_test2)

'''
將測試集的預測結果儲存到本地
'''
df_test['class'] = y_test.tolist()  #轉換為python的List形式

df_test['class'] = df_test['class'] + 1   #將class+1,保持和官方預測值一致
df_result = df_test.loc[:,['id','class']]


df_result.to_csv('./result.csv',index = False)#將結果儲存至本地檔案
print(df_result.head())

time_end = time.time()
print("共用時:",time_end - time_start)