




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、昆明理工大學信息工程與自動化學院學生實驗報告( 學年 第 1 學期 )課程名稱:人工智能 開課實驗室: 信自樓 504年 12 月 24 日年級、專業、班學號姓名成績實驗項目名稱天氣決策樹指導教師吳霖教師 評 語該同學是否了解實驗原理:A.了解B.基本了解C.不了解該同學的實驗能力:A.強 B.中等 C.差 該同學的實驗是否達到要求:A.達到B.基本達到C.未達到實驗報告是否規范:A.規范B.基本規范C.不規范實驗過程是否詳細記錄:A.詳細B.一般 C.沒有 教師簽名: 年月日、上機目的及內容1.上機內容 根據下列給定的 14 個數據 ,運用 Information Gain 構造一個天氣決策
2、樹。例子編號屬性分類天況溫度濕度風況1晴熱大無N2晴熱大有N3多云熱大無P4雨中大無P5雨冷正常無P6雨冷正常有N7多云冷正常有P8晴中大無N9晴冷正常無P10雨中正常無P11晴中正常有P12多云中大有P13多云熱正常無P14雨中大有N2.上機目的( 1)學習用 Information Gain 構造決策樹的方法; ( 2)在給定的例子上,構造出正確的決策樹; (3)理解并掌握構造決策樹的技術要點。二、實驗原理及基本技術路線圖(方框原理圖或程序流程圖)( 1)設計并實現程序,構造出正確的決策樹;( 2)對所設計的算法采用大 O 符號進行時間復雜性和空間復雜性分析;實驗考慮到幾個屬性:天況晴、雨
3、、多云; 溫度熱、中、冷; 濕度大、正常; 風況 有、無;然后根據每個屬性來算出信息增益,接下來我們根據信息增益最大的來進行劃分。根據問 題設計算法,建立數據結構,設計需要用的類,然后通過編程實現問題求解。了解和求解最大信息增益 和最小熵選擇平均熵最小的屬性作為根節點,用同樣的方法選擇其他節點直至形成整個決策樹。 dataset 就是具體的劃分過程,首先找到可用的劃分項目,再第一次劃分之后再相關的數據來計算熵。Attributevalue 函數流程圖Datapiont 函數流程圖三、所用儀器、材料(設備名稱、型號、規格等或使用軟件)1臺 PC及VISUAL C+軟件四、實驗方法、步驟(或:程序
4、代碼或操作過程)源代碼:main 函數:#include <fstream>#include <iostream>#include <list>#include <sstream>#include <string>#include <vector>#include ""#include ""#include ""DataPoint processLine(std:string const& sLine) std:istringstream isLine(s
5、Line, std:istringstream:in); std:vector<AttributeValue> attributes;while( () )std:string rawfield; isLine >> rawfield; ( AttributeValue( rawfield ) );AttributeValue v = ();();bool type = ();return DataPoint(attributes, type);void main()std:ifstream ifs("", std:ifstream:in);Data
6、Set initDataset;while( () )std:string sLine; std:getline(ifs, sLine); ( processLine(sLine) );std:list<DataSet> processQ; std:vector<DataSet> finishedDataSet;(initDataset);while ( () > 0 ) std:vector<DataSet> splittedDataSets;DataSet dataset = ();(splittedDataSets);();for (int i=
7、0; i<(); +i)float prob = splittedDataSetsi.getPositiveProb();if (prob = | prob =(splittedDataSetsi);else(splittedDataSetsi);std:cout << "The dicision tree is:" << std:endl; for (int i = 0; i < (); +i)finishedDataSeti.display();DataSet 函數:#include <iostream>#include
8、<map>#include ""#include ""void SplitAttributeValue:display()std:cout << "tSplit attribute ID(" << m_attributeIndex << ")t" std:cout << "Split attribute value(" << () << ")" << std:endl;void D
9、ataSet:addDataPoint(DataPoint const& datapoint)(datapoint);float DataSet:getPositiveProb()float nPositive = 0;for(int i=0; i<(); +i)if ( m_datai.isPositive() )nPositive+;return nPositive / ();struct Statint nPos;int nNeg;int id;void DataSet:splitDataSet(std:vector<DataSet>& splitted
10、Sets)etNAttributes();int i, j;std:vector<bool> splittingAttributeBV;(nAttributes);for (i=0; i<nAttributes; +i) splittingAttributeBVi = true;for (i=0; i<(); +i)splittingAttributeBV m_splitAttributesi.getAttributeIndex() = false; std:vector<int> splittingAttributeIds;for (i=0; i<n
11、Attributes; +i)if (true = splittingAttributeBVi)(i);typedef std:map<AttributeValue, Stat, AttributeValueCmp> AttributeValueStat;typedef std:map<AttributeValue, Stat, AttributeValueCmp>:iterator AttributeValueStat_iterator;typedef std:map<AttributeValue, Stat, AttributeValueCmp>:con
12、st_iterator AttributeValueStat_const_iterator;etAttribute(splittingAttributeIdsj);AttributeValueStat_iterator it = splittingStatsj.find(v); if ( splittingStatsj.end() = it )Stat stat;if ( m_datai.isPositive() )= 1;= 0;= 0;else= 0;= 1;= 0;splittingStatsj.insert(std:pair<AttributeValue, Stat>(v,
13、 stat);elseif ( m_datai.isPositive() )it->+;elseit->+;egin();it != splittingStatsj.end(); +it)std:cout << "t" << it->() << " t " << it-> << " t " << it-> << std:endl; egin();it != splittingStatsj.end(); +it)int nS
14、amples = it-> + it->float p = it->p /= nSamples;entropy += calEntropy(p) * nSamples / n; if (entropy < minEntropy | -1 = splitAttributeId)minEntropy = entropy; splitAttributeId = j;std:cout << "Split at attribute(" << splittingAttributeIdssplitAttributeId << &
15、quot;)" << std:endl <<std:endl;egin();it != splittingStatssplitAttributeId.end(); +it) it-> = k+;( k);for (i=0; i<k; +i)for (j=0; j<(); +j)splittedSetsi.( m_splitAttributesj );for (AttributeValueStat_iterator itt = splittingStatssplitAttributeId.begin(); itt != splittingSta
16、tssplitAttributeId.end(); +itt) splittedSetsitt->.(SplitAttributeValue(itt->first, attrId);for (i=0; i<(); +i)AttributeValue const& v = m_datai.getAttribute(attrId); AttributeValueStat_const_iterator it = (v);if ( () != it ) splittedSetsit->.addDataPoint(m_datai); else throw DataErrE
17、xception();void DataSet:display()int i;std:cout << "Dataset(" << this << ")" << std:endl;for (i=0; i<(); +i) m_splitAttributesi.display();std:cout << "Data:" << std:endl;for (i=0; i<(); +i) m_datai.display();std:cout << st
18、d:endl;DataPoint 函數:#include <>float log2 (float x)return / log10(2) * log10(x);float calEntropy(float prob)float sum=0;if (prob = 0 | prob = 1)return 0;sum -= prob * log2(prob);sum -= (1 - prob) * log2 ( 1 - prob );return sum;Basefun 函數:#include <>float log2 (float x)return / log10(2) *
19、 log10(x);float calEntropy(float prob)float sum=0;if (prob = 0 | prob = 1) return 0;sum -= prob * log2(prob);sum -= (1 - prob) * log2 ( 1 - prob );return sum;AttributeValue 函數:#include ""#include ""AttributeValue:AttributeValue(std:string const& instring): m_value(instring)bo
20、ol AttributeValue:GetType()if (m_value = "P")return true;else if (m_value = "N")return false;elsethrow DataErrException();AttributeValue 頭文件:#ifndef ATTRIBUTE_VALUE_H_#define ATTRIBUTE_VALUE_H_#include <string>class AttributeValuepublic:AttributeValue(std:string const&
21、instring);bool GetType();std:string const& getValue() constreturn m_value;private:std:string m_value;struct AttributeValueCmpbool operator() (AttributeValue const& lhs, AttributeValue const& rhs) constreturn () < ();#endifBase 頭文件:class DataErrException : public std:exception;float ca
22、lEntropy(float prob);DataPoint 頭文件:#ifndef DATA_POINT_H_#define DATA_POINT_H_#include <vector>#include ""class DataPointpublic:DataPoint(std:vector<AttributeValue> const& attributes, bool type); bool isPositive()return m_type;int getNAttributes()return ();AttributeValue con
23、st& getAttribute(int index)return m_attributesindex;void display();private:std:vector<AttributeValue> m_attributes;bool m_type;#endifDataSet 頭文件:#include <map>#include <utility>#include ""class SplitAttributeValuepublic:SplitAttributeValue(AttributeValue v, int id): m
24、_v(v), m_attributeIndex(id)int getAttributeIndex()return m_attributeIndex;void display();private:int m_attributeIndex;AttributeValue m_v;class DataSetpublic:void addDataPoint(DataPoint const& datapoint);float getPositiveProb();void splitDataSet(std:vector<DataSet>& splittedSets); void display();private:std:vector<SplitAttributeVal
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯網文化產業財產抵押反擔保貸款協議樣本
- 殘疾人庇護性就業機構用工與福利保障協議
- 武漢軟件工程職業學院《西方思想史》2023-2024學年第二學期期末試卷
- 2025年冷鏈物流溫控技術培訓與操作規范手冊報告
- 2025年成人教育終身學習體系構建與平臺運營的在線教育商業模式創新與盈利模式報告
- 商業服務行業國際合作中的政策協調與對接機制研究報告
- 2025年人行道彩色地磚行業深度研究分析報告
- 2025年中國草酰氯項目創業計劃書
- 在工廠實習目的
- 商標許可使用合同參考
- 財政一體化業務系統
- 北美連續油管技術的新進展及發展趨勢李宗田
- 博克服裝CAD制版說明操作手冊(共95頁)
- 光電效應測普朗克常數-實驗報告
- 110千伏變電站工程檢測試驗項目計劃
- 《鐵路貨物運價規則》
- YD_T 3956-2021 電信網和互聯網數據安全評估規范_(高清版)
- (完整版)數學常用英文詞匯
- 完整word版醫院外包業務管理質量安全評估報告內部審計報告及工作改進實例
- 最新《消費者行為學》綜合練習
- 調崗調薪實操指引PPT課件
評論
0/150
提交評論