日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

    歡迎訪問 生活随笔!

    生活随笔

    當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

    编程问答

    机器学习——决策树学习

    發布時間:2023/12/4 编程问答 36 豆豆
    生活随笔 收集整理的這篇文章主要介紹了 机器学习——决策树学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    機器學習——決策樹學習

    • 一、什么是決策樹
    • 二、決策樹的學習過程
      • 特征選擇:
      • 決策樹生成:
      • 剪枝:
    • 三、決策樹的一個具體的實例
      • 導入數據
        • python strip() 函數和 split() 函數的詳解及實例
      • 數據處理
        • 提取到訓練集中的標簽
        • 給數據的每一列添加上標簽,并且轉化為字典來存儲每一列
        • 需要將數據轉化為使用數值來代表的數據(字符串)——序列化
      • 調用庫函數
      • 繪制決策樹
      • 進行預測

    決策樹:在機器學習中,決策樹是一個預測模型,它代表的是對象屬性和對象值之間的一種映射關系
    決策樹的構建步驟:
    1特征的選擇
    2決策樹的生成
    3決策樹的修剪

    參考文檔:決策樹算法內容講解

    一、什么是決策樹

    所謂決策樹,就是一個類似于流程圖的樹形結構,樹內部的每一個節點代表的是對一個特征的測試,樹的分支代表該特征的每一個測試結果,而樹的每一個葉子節點代表一個類別。樹的最高層是就是根節點。下圖即為一個決策樹的示意描述,內部節點用矩形表示,葉子節點用橢圓表示。

    二、決策樹的學習過程

    一棵決策樹的生成過程主要分為以下3個部分:

    特征選擇:

    特征選擇是指從訓練數據中眾多的特征中選擇一個特征作為當前節點的分裂標準,如何選擇特征有著很多不同量化評估標準標準,從而衍生出不同的決策樹算法。

  1. 特征的選擇
    方法一:信息增益
    方法二:信息熵
    方法三:基尼指數
  2. 決策樹生成:

    根據選擇的特征評估標準,從上至下遞歸地生成子節點,直到數據集不可分則停止決策樹停止生長。 樹結構來說,遞歸結構是最容易理解的方式。
    2. 決策樹的生成(樹的構建是個遞歸的過程)

    剪枝:

    決策樹容易過擬合,一般來需要剪枝,縮小樹結構規模、緩解過擬合。剪枝技術有預剪枝和后剪枝兩種。
    3. 決策樹的修剪
    方法一:預剪枝,及時停止樹增長
    方法二:后剪枝

    三、決策樹的一個具體的實例

    所用到的資料:(完整的代碼和處理文件)
    鏈接:https://pan.baidu.com/s/1fIAUdCDTpR7TiqLHZtx1yg
    提取碼:0929

    導入數據

    python strip() 函數和 split() 函數的詳解及實例

    一直以來都分不清楚strip和split的功能,實際上strip是刪除的意思而split則是分割的意思。因此也表示了這兩個功能是完全不一樣的,strip可以刪除字符串的某些字符,而split則是根據規定的字符將字符串進行分割。
    split()函數
    split():拆分字符串。通過指定分隔符對字符串進行切片,并返回分割后的字符串列表(list)

    #導入數據with open('lenses.txt', 'r') as fr: #加載文件lenses = [inst.strip().split('\t') for inst in fr.readlines()] #處理文件print("輸出讀取到的數據:")print(lenses) inst=[]data=[]with open('lenses.txt', 'r') as fr:for inst in fr.readlines():#一行一行的讀取print(inst.strip().split('\t'))data.append(inst.strip().split('\t'))print('輸出讀取到的全部數據:')print(data)

    數據處理

    在使用回歸模型和機器學習模型時,所有考察數據都是數值更容易得到更好的結果。因為都是基于數學函數方法的,所以當數據集中出現類別數據時,此時數據是不理想的,不能用數學方法處理它們。例如處理性別屬性時,將男和女兩個性別數據用0和1進行代替。

    提取到訓練集中的標簽

    data_target=[]for each in data:data_target.append(each[-1])#因為在原有數據集中在最后一列print("輸出提取到訓練集中的標簽:")print(data_target)

    給數據的每一列添加上標簽,并且轉化為字典來存儲每一列

    dataLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] # 特征標簽data_list=[]#臨時存儲全部數據data_dict={} #保存data數據的字典,用于生成pandasfor each_label in dataLabels:for each_data in data:data_list.append(each_data[dataLabels.index(each_label)])print("輸出每一列的數據:")print(data_list)data_dict[each_label]=data_listdata_list=[]print("打印字典信息:")print(data_dict )

    需要將數據轉化為使用數值來代表的數據(字符串)——序列化

    在使用回歸模型和機器學習模型時,所有考察數據都是數值更容易得到更好的結果。因為都是基于數學函數方法的,所以當數據集中出現類別數據時,此時數據是不理想的,不能用數學方法處理它們。例如處理性別屬性時,將男和女兩個性別數據用0和1進行代替。

    使用:LabelEncoder()將object類型轉化為數值

    data_pd=pd.DataFrame(data_dict)print("轉化為pd.DataFrame類型方便序列化")print(data_pd)le=LabelEncoder()for col in data_pd.columns:data_pd[col]=le.fit_transform(data_pd[col])print("序列化處理:")print(data_pd)

    #數據處理階段lenses_target = [] #提取每組數據的類別,保存在列表里for each in lenses:lenses_target.append(each[-1]) #從最后一列提取標簽print("提取每組數據的類別標簽,保存在列表里:")print(lenses_target)lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] #特征標簽lenses_list = [] #保存lenses數據的臨時列表lenses_dict = {} #保存lenses數據的字典,用于生成pandasfor each_label in lensesLabels: #提取信息,生成字典for each in lenses:lenses_list.append(each[lensesLabels.index(each_label)])lenses_dict[each_label] = lenses_list#print(lenses_dict)lenses_list = []print("打印字典信息:")print(lenses_dict) #打印字典信息lenses_pd = pd.DataFrame(lenses_dict) #生成pandas.DataFrameprint("打印pandas.DataFrame:")print(lenses_pd) #打印pandas.DataFrameprint("數據序列化:")le = LabelEncoder() #創建LabelEncoder()對象,用于序列化for col in lenses_pd.columns: #序列化lenses_pd[col] = le.fit_transform(lenses_pd[col])print("打印編碼信息:")print(lenses_pd)

    調用庫函數

    #調用庫函數clf = tree.DecisionTreeClassifier(max_depth = 4) #最多一共四層 #創建DecisionTreeClassifier()類clf = clf.fit(lenses_pd.values.tolist(), lenses_target) #使用數據,構建決策樹

    繪制決策樹

    # 繪制決策樹dot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data,feature_names=lenses_pd.keys(),class_names=clf.classes_,filled=True, rounded=True,special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_jpg('decision_tree預測決策樹.jpg')

    進行預測

    #進行預測print("預測:[[presbyopic,myope,yes,normal],[presbyopic,hyper,yes,normal]]")print(clf.predict([[1, 1, 1, 0], [1, 0, 1, 0]]))

    總結

    以上是生活随笔為你收集整理的机器学习——决策树学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。