最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年05月17日 07:55:54   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇python算法演練_One Rule 算法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

這樣某一個(gè)特征只有0和1兩種取值,數(shù)據(jù)集有三個(gè)類(lèi)別。當(dāng)取0的時(shí)候,假如類(lèi)別A有20個(gè)這樣的個(gè)體,類(lèi)別B有60個(gè)這樣的個(gè)體,類(lèi)別C有20個(gè)這樣的個(gè)體。所以,這個(gè)特征為0時(shí),最有可能的是類(lèi)別B,但是,還是有40個(gè)個(gè)體不在B類(lèi)別中,所以,將這個(gè)特征為0分到類(lèi)別B中的錯(cuò)誤率是40%。然后,將所有的特征統(tǒng)計(jì)完,計(jì)算所有的特征錯(cuò)誤率,再選擇錯(cuò)誤率最低的特征作為唯一的分類(lèi)準(zhǔn)則——這就是OneR。

現(xiàn)在用代碼來(lái)實(shí)現(xiàn)算法。

# OneR算法實(shí)現(xiàn)
import numpy as np
from sklearn.datasets import load_iris
# 加載iris數(shù)據(jù)集
dataset = load_iris()
# 加載iris數(shù)據(jù)集中的data數(shù)組(數(shù)據(jù)集的特征)
X = dataset.data
# 加載iris數(shù)據(jù)集中的target數(shù)組(數(shù)據(jù)集的類(lèi)別)
y_true = dataset.target
# 計(jì)算每一項(xiàng)特征的平均值
attribute_means = X.mean(axis=0)
# 與平均值比較,大于等于的為“1”,小于的為“0”.將連續(xù)性的特征值變?yōu)殡x散性的類(lèi)別型。
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
# 找到一個(gè)特征下的不同值的所屬的類(lèi)別。
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
  # 進(jìn)行排序,找出最多的類(lèi)別。按從大到小排列
  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)
# 接著定義一個(gè)以特征為自變量的函數(shù),找出錯(cuò)誤率最低的最佳的特征,以及該特征下的各特征值所屬的類(lèi)別。
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
# 找到所有特征下的各特征值的類(lèi)別,格式就如:{0:({0: 0, 1: 2}, 41)}首先為一個(gè)字典,字典的鍵是某個(gè)特征,字典的值由一個(gè)集合構(gòu)成,這個(gè)集合又是由一個(gè)字典和一個(gè)值組成,字典的鍵是特征值,字典的值為類(lèi)別,最后一個(gè)單獨(dú)的值是錯(cuò)誤率。
all_predictors = {feature: train_feature(x_train, y_train, feature) for feature in xrange(x_train.shape[1])}
# print all_predictors
# 篩選出每個(gè)特征下的錯(cuò)誤率出來(lái)
errors = {feature: error for feature, (mapping, error) in all_predictors.items()}
# 對(duì)錯(cuò)誤率排序,得到最優(yōu)的特征和最低的錯(cuò)誤率,以此為模型和規(guī)則。這就是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
# 開(kāi)始測(cè)試——對(duì)最優(yōu)特征下的特征值所屬類(lèi)別進(jìn)行分類(lèi)。
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
# 在這個(gè)最優(yōu)特征下,各特征值的所屬類(lèi)別與測(cè)試數(shù)據(jù)集相對(duì)比,得到準(zhǔn)確率。
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))

總結(jié):OneR算法,我在最開(kāi)始的以為它是找到一個(gè)錯(cuò)誤率最低的特征之后可以判斷所有特征的分類(lèi),其實(shí),現(xiàn)在明白它只能判斷這個(gè)特征下的各特征值的分類(lèi),所以,明顯它會(huì)有一些局限性。只是說(shuō)它比較快捷也比較簡(jiǎn)單明了。但是,還是得是情況而判斷是否使用它。

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的第一列數(shù)據(jù)。而用下面的代碼得到的是x_test的第一行數(shù)據(jù)。
print x_test[0]
# 注意兩者區(qū)別

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

相關(guān)文章

  • python捕獲警告的三種方法

    python捕獲警告的三種方法

    這篇文章主要介紹了python捕獲警告的三種方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路

    Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路

    這篇文章主要介紹了Python制作簡(jiǎn)易版小工具之計(jì)算天數(shù)的實(shí)現(xiàn)思路,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • windows下python安裝pip方法詳解

    windows下python安裝pip方法詳解

    這篇文章主要介紹了windows下python安裝pip方法詳解,需要的朋友可以參考下
    2020-02-02
  • python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決

    python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決

    這篇文章主要介紹了python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的示例代碼

    Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的示例代碼

    學(xué)生管理系統(tǒng)是一個(gè)常見(jiàn)的應(yīng)用程序,它可以幫助學(xué)校、教育機(jī)構(gòu)或教師管理學(xué)生的信息,本文將介紹如何利用Python開(kāi)發(fā)一個(gè)學(xué)生管理系統(tǒng),需要的可以參考一下
    2023-07-07
  • python掃描線(xiàn)填充算法詳解

    python掃描線(xiàn)填充算法詳解

    這篇文章主要為大家詳細(xì)介紹了python掃描線(xiàn)填充算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 圖文詳解牛頓迭代算法原理及Python實(shí)現(xiàn)

    圖文詳解牛頓迭代算法原理及Python實(shí)現(xiàn)

    牛頓迭代法又稱(chēng)為牛頓-拉夫遜(拉弗森)方法,它是牛頓在17世紀(jì)提出的一種在實(shí)數(shù)域和復(fù)數(shù)域上近似求解方程的方法。本文將利用圖文詳解牛頓迭代算法原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn)

    python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn)

    這篇文章主要介紹了python中Tkinter 窗口之輸入框和文本框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python異步編程之yield?from的用法詳解

    Python異步編程之yield?from的用法詳解

    yield?from?是Python3.3?后新加的語(yǔ)言結(jié)構(gòu),可用于簡(jiǎn)化yield表達(dá)式的使用,這篇文章主要為大家詳細(xì)介紹了yield?from的用法,需要的可以了解一下
    2023-12-12
  • Django實(shí)現(xiàn)翻頁(yè)的示例代碼

    Django實(shí)現(xiàn)翻頁(yè)的示例代碼

    翻頁(yè)是經(jīng)常使用的功能,Django提供了翻頁(yè)器。用Django的Paginator類(lèi)實(shí)現(xiàn),有需要了解Paginator類(lèi)用法的朋友可參考。希望此文章對(duì)各位有所幫助
    2021-05-05

最新評(píng)論

浪卡子县| 怀集县| 武威市| 屯门区| 华阴市| 青海省| 天全县| 西宁市| 玛多县| 灌南县| 金沙县| 天长市| 湛江市| 阿鲁科尔沁旗| 天镇县| 凌源市| 怀化市| 苏尼特右旗| 民丰县| 高阳县| 德格县| 安顺市| 葵青区| 务川| 白城市| 亳州市| 措美县| 和硕县| 鹤山市| 晋中市| 田阳县| 衡阳县| 石狮市| 保山市| 阿巴嘎旗| 岳普湖县| 山东省| 滦南县| 天长市| 东兰县| 比如县|