CSC330程式設計語言專案

j22h7x發表於2024-04-03

CSC330程式設計語言專案
注1本專案單獨完成
注2禁止與他人一起工作。
注2禁止與他人共享查詢或檔案。

特別注意:剽竊單一或多個來源歸屬不充分的情況應導致不及格大部分或全部抄襲的作品應獲得F級的成績
課程
期末將對提交的稿件進行剽竊審查。你要對自己的投稿負責,但如果有人抄襲,你也可能要負責您的意見書。
1目標完成此專案後,您將擁有以下經驗:
功能程式設計使用先驗演算法在大資料集中進行籃子分析
2先驗演算法先驗演算法用於識別籃子分析中常見的專案組。例如如果你買牛奶,你還可能買什麼?
此演算法的輸入檔案將是CSV檔案。每個CSV檔案都是一組事務,每行一個。A.交易是一起出售的一組商品(每個商品用分隔符分隔)。交易是保證沒有重複專案。1.我們的目標是識別超過特定最低閾值的成對商品。最低支援閾值是一個專案為了成為其一部分而應該出現的事務的最小比例輸出(我們將這些流行專案稱為)。
先驗演算法相對簡單。假設i是資料集中不同專案的數量,n是流行專案的數量。使用字典作為主要資料結構,記憶體需求對於這個演算法是O(max(n2.
,i)),而與輸入的大小無關(其可以比可用儲存器)。為了實現這一點,該演算法對輸入資料進行兩次傳遞。第一次透過。在所有交易的第一次透過中,計算一個流行專案的字典。這個字典的關鍵字是項名稱,值是頻率(其中的事務數專案出現)。代 寫CSC330程式設計語言專案讀取所有事務後,計算最小支援(計算的整數透過將最小支援閾值乘以事務的數量、截斷該數量,即地板)。返回一個僅包含流行專案的詞典。第一次傳遞的結果是隻包含流行專案的詞典。第二次透過。再次讀取交易。這一次保留一個流行的成對物品的櫃檯。關鍵將是一對專案(專案1,專案2)。頻率是對稱的,freq(item1,item2)=freq(tem2,第1項)。因此,詞典每對只應儲存一本(例如,按如下順序訂購給定item1,item2,字典的關鍵字總是(min(item1,item2),max(item1、item2))。返回一個僅包含常用項對的詞典。第二次傳遞的結果是隻包含流行專案對的詞典。報告結果。使用這兩本詞典,列印一張包含結果的表格。有關詳細資訊,請參見下文。請注意,一些CSV檔案使用“,”和一些“;”作為分離器。3你的任務,如果你擇接受它實現3個功能,實現A先驗演算法的3個步驟
3.1準備工作:如何執行程式
您的程式使用以下引數執行。有關如何編譯和執行程式。您將在Makefile中找到4個測試用例。<filename><delimiter><MinimumSuportThreshold><linesToPrint>檔名。CSV分隔的檔案。每行一條記錄。您可以假設中沒有重複項記錄分隔符。一個單字元字串,表示記錄中專案之間的分隔符。使用引號圍繞它以避免外殼來解釋角色。最小支援閾值。一對必須成為的一部分的最小支援閾值輸出(在0和1之間)行列印。最多列印此數量的專案。如果結果包含比此更頻繁的專案數字,只列印此數量的對。2.例如,命令:./apriori online.csv','01 10使用帶有分隔符(逗號)和最小支援閾值0.01的檔案online.csv,並請求最多列印前10項。3.2實施細節
從Gitlab下載tar檔案。它包含多個檔案。您只能修改並提交apriori.ml。請注意,此檔案定義的模組必須與所提供的簽名相匹配。您的工作是實現3個功能:3.3第一道使do_first_pass((閾值:float),(行:in_channel),
(delim:char)):first_pass_result=此函式有三個引數:
1.閾值:最小閾值(介於0和1之間),
2.行:從哪裡讀取行的輸入流,
3.delim:每行中專案的分隔符(一個字元)。使用函式輸入行讀取流。請注意,此函式會生成一個異常(即您必須處理)。do first pass應該返回一個具有3個值的記錄(有關記錄的定義,請參見apriori.ml):1.流中事務的數量,
2.最小支援(即頻繁專案應出現的最小次數),以及
3.具有相應頻率的頻繁專案的字典。要計算最小支援,請將浮點數截斷為整數。字典應該僅包含至少具有此支援的項。
3.3.1第二遍
設do_second_pass((support:int),(popItems:items_dict),(行:in_channel),(delim:char)):pairs_dict=此函式採用4個引數:
3.1.支援度:最小支援度(整數),
2.popItems:常用項的字典,
3.行:具有事務的輸入流,
4.delim:分隔符(一個字元)它應該返回一個字典,其中包含等於或高於最小支援閾值的流行對及其對應的頻率。3.4列印表設print_table((nTransactions:int),(popItems:items_dict),(popPairs:pairs_dict),(to列印:int)):int=此函式用於列印一張包含流行配對和一些額外資訊的表格。它需要4個引數:1.傳輸是檔案中的記錄數(第一次透過的結果)。
2.popItems是熱門專案(第一次透過的結果),3.freqPairs是流行對的列表(第二次透過的結果)。4.to列印:最多列印給定數量的對。這些報告的列為:對該對的支援:擁有該對的交易的比例。專案名稱。該專案的頻率。出現此專案的交易記錄數。本專案的支援。包括此專案的交易記錄的比例。配對中的另一個專案。
這對的頻率。出現此對的事務數。信心:一對的支援除以其他專案的支援。此數字表示第一專案出現的第二專案的交易的比例。當它出現時,意味著每當第二個專案出現時,第一個專案也會出現。提升。一對的支撐除以兩項支撐的乘積。使用以下引數執行:Filename[./data/online.csv]Separator[,]最小相對支援閾值[0.01],最多列印10個元組。SuppPair專案-頻率-支援-頻率-配置-提升0.010887再生茶盤綠色386 0.014902再生茶盤粉色282 0.898 60.2650.010501攝政茶盤玫瑰457 0.017643攝政茶板粉紅色272 0.866 49.0970.012431攝政茶具玫瑰457 0.017643攝政茶具綠色322 0.834 47.2810.010887木星聖誕斯堪的納維亞515 0.019883木樹聖誕斯堪堪的納維亞282 0.832 41.8380.013512套/6個紅點紙盤527 0.020346套/6個紅點紙杯350 0.818 40.1930.024863綠色攝政茶杯和茶托1057 0.040808粉色攝政茶杯茶托644 0.804 19.7020.010154罌粟劇場廚房440 0.016987罌粟劇場客廳263 0.797 46.9160.010115罌粟遊戲室臥室426 0.016447罌粟遊戲室客廳262 0.794 48.2740.013512小推車混合設計橙色碗528 0.020385小棉花糖粉色碗350 0.781 38.3260.012354浴室金屬標誌709 0.027372衛生間金屬標誌320 0.780 28.514列印專案數:10
交易數量:25902
熱門商品數量:592
熱門對數:746結果應按照以下順序排列(想想SQL中的順序):
1.置信度下降,
2.升降機下降,
3.專案頻率下降,
4.專案名稱,升序,
5.專案名稱,以升序顯示。
使用這些繫結來格式化輸出(它們在apriori.ml中定義):let lineTitleFormatString=format_of_string“SuppPair-%s-頻率-支援-%s-頻率對-配置-提升\n”let lineDataFormatString=format_of_string“%9.6f%s%6d%8.6f%s%6d%9.3f%9.3f\n”這些工作方式與C中的printf相同。請注意,這兩個項(%s)的列不具有寬度規格。這是因為它們的寬度將被動態計算。每個的寬度列是要列印的任何相應專案的最大寬度(但不能小於
10個字元)

相關文章