昆明理工大學天氣決策樹_第1頁
昆明理工大學天氣決策樹_第2頁
昆明理工大學天氣決策樹_第3頁
昆明理工大學天氣決策樹_第4頁
昆明理工大學天氣決策樹_第5頁
免費預覽已結束,剩余12頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論