欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python算法演練_One Rule 算法(詳解)

系統 1962 0

這樣某一個特征只有0和1兩種取值,數據集有三個類別。當取0的時候,假如類別A有20個這樣的個體,類別B有60個這樣的個體,類別C有20個這樣的個體。所以,這個特征為0時,最有可能的是類別B,但是,還是有40個個體不在B類別中,所以,將這個特征為0分到類別B中的錯誤率是40%。然后,將所有的特征統計完,計算所有的特征錯誤率,再選擇錯誤率最低的特征作為唯一的分類準則――這就是OneR。

現在用代碼來實現算法。

            
# OneR算法實現
import numpy as np
from sklearn.datasets import load_iris
# 加載iris數據集
dataset = load_iris()
# 加載iris數據集中的data數組(數據集的特征)
X = dataset.data
# 加載iris數據集中的target數組(數據集的類別)
y_true = dataset.target
# 計算每一項特征的平均值
attribute_means = X.mean(axis=0)
# 與平均值比較,大于等于的為“1”,小于的為“0”.將連續性的特征值變為離散性的類別型。
x = np.array(X >= attribute_means, dtype="int")


from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y_true, random_state=14)
from operator import itemgetter
from collections import defaultdict
# 找到一個特征下的不同值的所屬的類別。
def train_feature_class(x, y_true, feature_index, feature_values):
  num_class = defaultdict(int)
  for sample, y in zip(x, y_true):
    if sample[feature_index] == feature_values:
      num_class[y] += 1
  # 進行排序,找出最多的類別。按從大到小排列
  sorted_num_class = sorted(num_class.items(), key=itemgetter(1), reverse=True)
  most_frequent_class = sorted_num_class[0][0]
  error = sum(value_num for class_num , value_num in sorted_num_class if class_num != most_frequent_class)
  return most_frequent_class, error
# print train_feature_class(x_train, y_train, 0, 1)
# 接著定義一個以特征為自變量的函數,找出錯誤率最低的最佳的特征,以及該特征下的各特征值所屬的類別。
def train_feature(x, y_true, feature_index):
  n_sample, n_feature = x.shape
  assert 0 <= feature_index < n_feature
  value = set(x[:, feature_index])
  predictors = {}
  errors = []
  for current_value in value:
    most_frequent_class, error = train_feature_class(x, y_true, feature_index, current_value)
    predictors[current_value] = most_frequent_class
    errors.append(error)
  total_error = sum(errors)
  return predictors, total_error
# 找到所有特征下的各特征值的類別,格式就如:{0:({0: 0, 1: 2}, 41)}首先為一個字典,字典的鍵是某個特征,字典的值由一個集合構成,這個集合又是由一個字典和一個值組成,字典的鍵是特征值,字典的值為類別,最后一個單獨的值是錯誤率。
all_predictors = {feature: train_feature(x_train, y_train, feature) for feature in xrange(x_train.shape[1])}
# print all_predictors
# 篩選出每個特征下的錯誤率出來
errors = {feature: error for feature, (mapping, error) in all_predictors.items()}
# 對錯誤率排序,得到最優的特征和最低的錯誤率,以此為模型和規則。這就是one Rule(OneR)算法。
best_feature, best_error = sorted(errors.items(), key=itemgetter(1), reverse=False)[0]
# print "The best model is based on feature {0} and has error {1:.2f}".format(best_feature, best_error)
# print all_predictors[best_feature][0]
# 建立模型
model = {"feature": best_feature, "predictor": all_predictors[best_feature][0]}
# print model
# 開始測試――對最優特征下的特征值所屬類別進行分類。
def predict(x_test, model):
  feature = model["feature"]
  predictor = model["predictor"]
  y_predictor = np.array([predictor[int(sample[feature])] for sample in x_test])
  return y_predictor

y_predictor = predict(x_test, model)
# print y_predictor
# 在這個最優特征下,各特征值的所屬類別與測試數據集相對比,得到準確率。
accuracy = np.mean(y_predictor == y_test) * 100
print "The test accuracy is {0:.2f}%".format(accuracy)

from sklearn.metrics import classification_report

# print(classification_report(y_test, y_predictor))
          

總結: OneR算法,我在最開始的以為它是找到一個錯誤率最低的特征之后可以判斷所有特征的分類,其實,現在明白它只能判斷這個特征下的各特征值的分類,所以,明顯它會有一些局限性。只是說它比較快捷也比較簡單明了。但是,還是得是情況而判斷是否使用它。

class????? precision recall f1-score support

0????????????? 0.94???? 1.00??? 0.97?????? 17
1????????????? 0.00???? 0.00??? 0.00?????? 13
2????????????? 0.40???? 1.00??? 0.57??????? 8

avg / total 0.51???? 0.66??? 0.55?????? 38

注:

# 在上面代碼中。
for sample in x_test:
print sample[0]
# 得到的是x_test的第一列數據。而用下面的代碼得到的是x_test的第一行數據。
print x_test[0]
# 注意兩者區別

以上這篇python算法演練_One Rule 算法(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品美女 | a毛片在线看免费观看 | 操欧美女 | 波多野结衣在线观看视频 | 亚洲国产精品99久久久久久久久 | 九九视频在线 | 久久国产精品一区二区三区 | 狠狠综合久久久久综 | 精彩视频一区 | 精品一区二区三区不卡 | 国产区精品 | 亚洲最新永久观看在线 | 国产成人精品高清在线观看99 | 日韩免费福利视频 | 久久草在线看 | 成人爽a毛片免费啪啪红桃视频 | 国产三级在线视频播放线 | 亚洲精品久久久久久久久久吃药 | 成人国产免费观看 | 成人综合视频网 | 国产综合欧美 | 激情综合网婷婷 | 青青草在线免费视频 | 国产激情久久久久久熟女老人AV | 久草老司机 | 欧美一级黄色录相 | 春色www在线视频观看 | 99久久久精品国产一区二区 | 久久久久国产一区二区三区 | 亚洲精品福利在线 | 久久精品一区 | 精品视频一区二区 | 色综合成人 | 国产人成激情视频在线观看 | 在线观看免费av网 | 色天天爱天天狠天天透 | 国产精品日韩专区 | 国产成人免费永久播放视频平台 | 狠狠色老熟妇老熟女 | 国产午夜精品视频免费不卡69堂 | 国产中文字幕在线播放 |