COMP 330正則化邏輯迴歸分類

j22h7x發表於2024-04-02

COMP 330課業#51說明在這項任務中,您將實現一個正則化的邏輯迴歸來對文字文件進行分類。實現將在Spark之上的Python中進行給你,有必要使用亞馬遜AWS。您將被要求執行三個子任務:
(1)資料準備,
(2)學習(將透過梯度下降)和
(3)學習模型的評估。

注意:在你真正開始這項任務之前,完成HW 5和Lab 5是很重要的。HW5將給你一個機會來嘗試梯度下降來學習模型,第五實驗室將給你一些編寫高效NumPy程式碼的經驗,這兩種程式碼對製作A5都很重要體驗不那麼具有挑戰性!2資料您將處理一個由大約170000個文字文件和測試/評估組成的資料集由18700個文字文件組成的資料集。除了大約6000個文字文件外,其他所有文字文件都是維基百科頁;其餘檔案是對澳大利亞法院案件和裁決的描述。在最高水平上,你的任務是建立一個分類器,可以自動判斷文字文件是否是澳大利亞人法庭案例。我們準備了三個資料集供您使用。1.訓練資料集(1.9 GB的文字)。這是您將用於訓練邏輯迴歸的集合模型培訓資料單行文件.txt或者作為直接S3地址,因此您可以在Spark課業中使用它:s3://chrisjermainebucket/comp33
0 A5/TrainingDataOneLinePerDoc.txt2.測試資料集(20
0 MB的文字)。這是您將用於評估模型的集合:或者作為直接S3地址,因此您可以在Spark課業中使用它:
0 A5/TestingDataOneLinePerDoc.txt3.小型資料集(37.
5 MB的文字)。這是供您用於在上對模型進行培訓和測試的較小的資料集:需要注意的一些資料細節。您應該下載並檢視SmallTrainingData.txt檔案,然後再開始。您將看到內容有點像偽XML,其中每個文字文件以<doc id=…>開頭標記,並以</doc>結尾。所有文件都包含在單個文件中行文字。請注意,所有澳大利亞的法律案件都以<doc id='AU1222''…>開頭;也就是說,澳大利亞法律案件的doc-id總是以AU開頭。你將試圖弄清楚檔案是澳大利亞的一個法律案件,只看檔案的內容。1.3任務完成任務需要完成三項單獨的任務。和往常一樣,它使在轉移到較大的資料集之前,實現這些並在較小的資料集上執行它們是有意義的。3.1任務1首先,您需要編寫Spark程式碼,構建一個包含20000個最頻繁單詞的詞典在訓練語料庫中。這本詞典本質上是一個RDD,代 寫COMP 330正則化邏輯迴歸分類它以單詞為關鍵字單詞的頻率位置作為值。例如,最頻繁的單詞的值為零,並且19999是字典中頻率最低的單詞。為了獲得這項任務的榮譽,請給我們單詞“申請人”、“和”、“攻擊”的頻率位置,“蛋白質”和“汽車”。這些值應該是0到19999之間的值,如果單詞不在字典中,則應該是-1,因為它不在20000以內。請注意,完成此操作需要使用A4解決方案的變體。如果你不信任您的A4解決方案和想要我的解決方案,您可以在Piazza上釋出私人請求。3.2任務2接下來,您將把訓練集中的每個文件轉換為TF-IDF向量。然後您將使用一種梯度下降演算法,用於學習邏輯迴歸模型,該模型可以決定文件是否是否描述澳大利亞法庭案件。您的模型應該使用l2正則化;你可以在中玩一點東西來確定控制正則化程度的引數。我們會有足夠的你可能會發現正則化可能不太重要的資料(也就是說,它可能是你變得很好對正則化常數賦予非常小的權重的結果)。我想請你不要只是在網際網路上查詢梯度下降演算法並實現從類中的LLH函式開始,然後匯出您自己的梯度下降演算法。我們可以如果你陷入困境,請幫忙。在每次迭代結束時,計算模型的LLH。你應該進行梯度下降直到LLH在迭代之間的變化非常小。一旦你完成了這項任務,你將透過(a)寫下你的梯度更新公式來獲得積分,以及(b)給出具有最大回歸係數的50個單詞。也就是說,那50個單詞與澳大利亞的一個法庭案件最為密切相關。3.3任務3既然你已經訓練了你的模型,是時候對它進行評估了。在這裡,你將使用你的模型來預測無論每個測試點是否對應於澳大利亞的法院案例。為了獲得這項任務的榮譽,你需要為我們計算你的分類器獲得的F1分數——我們將使用獲得的F1得分我們對您提交的任務3進行評分的方式之一。此外,我要請您實際檢視文字中的三個誤報,即您的模型製作的(也就是說,你的模特認為是澳大利亞法庭案件的維基百科文章)。編寫段落描述為什麼你認為你的模型被愚弄了。是關於澳大利亞的壞檔案嗎?這個法律制度?如果你沒有三個假陽性,就用你有的(如果有的話)。4重要注意事項關於培訓和實施的一些說明。在實現和評估梯度下降演算法時,需要記住以下幾點。2.1.為了獲得良好的準確性,您需要對資料進行居中和規範化處理。也就是說,轉換你的資料每個維度的平均值為零,標準偏差為一。也就是說,減去平均值每個資料點的向量,然後將結果除以計算的標準偏差向量在資料集上。2.當對新資料進行分類時,其與迴歸係數集的點積為正的資料點是“是”,否定是“否”(見GLM講座中的幻燈片15)。您將努力最大化您的分類器的F1,您通常可以透過在“是”之間選擇不同的截止值來增加F1以及除零以外的“無”。您可以做的另一件事是新增另一個維度,其值為每個資料點一個(我們在課堂上討論過)。然後,學習過程將選擇迴歸這個特殊維度的係數,傾向於在零的截止點很好地平衡“是”和“否”。然而,一些學生過去曾報告說,這會增加訓練時間。3.學生在計算LLH和計算梯度更新。你可以做一些事情來避免這種情況,
(1)使用np.exp(),這似乎要非常健壯,並且
(2)轉換資料,使標準偏差小於1——如果如果標準偏差為1,您可能會嘗試10?2甚至10?5。您可能需要實驗一下。這就是在現實中實現資料科學演算法的美妙之處世界4.如果你發現你的訓練需要幾個多小時才能在最大的資料集上執行到收斂,這可能意味著你正在做一些天生就很慢的事情,你可以透過觀察來加快速度仔細檢查您的程式碼。有一點:首先在小樣本上訓練模型沒有問題的大型資料集(例如,10%的文件),然後使用結果作為初始化,然後繼續對完整資料集進行訓練。這可以加快達到收斂的過程。大資料、小資料和分級。前兩項任務值三分,後四分。自那以後在大資料集上執行所有內容可能很有挑戰性,我們將為您提供一個小資料選項。如果你訓練在TestingDataOneLinePerDoc.txt上測試資料,然後在SmallTrainingDataOneLinePerDoc上測試你的資料。我們在任務2和任務3上分別獲得0.5分和0.5分。這意味著你仍然可以獲得A,並且你不必處理大資料集。為了獲得全額學分,你可以進行培訓您的資料在相當大的TrainingDataOneLinePerDoc.txt資料集中,然後測試您的資料關於TestingDataOneLinePerDoc.txt。4.1使用的機器如果你決定嘗試在大資料集上獲得全部學分,你需要執行你的Spark課業三到五次機器作為工人,每個機器具有大約8個核心。如果你沒有嘗試獲得全部學分,你很可能在較小的叢集上執行即可。記住,如果你忘記關掉你的機器。請非常小心,並儘快關閉叢集你工作完了。當你重新開始工作時,你總是可以輕鬆地建立一個新的。4.2上繳建立一個包含所有三項任務結果的文件。確保非常清楚你是否嘗試了大資料或小資料選項。提交此文件以及您的所有程式碼。請全部拉上拉鍊您的程式碼和文件(請僅使用.gz或.zip!),或者附上每段程式碼以及您的文件到您提交的單獨文件。除了Python程式碼和您建立的文件

相關文章