OneR演算法的Python簡單實現

2021-08-15 07:41:40 字數 1546 閱讀 6869

oner演算法就是,在已有資料中,根據具有相同特徵值的個體最可能屬於哪個類別進行分類。即取效果最好的那個特徵進行分類。

#-*- coding=utf-8 -*-

#import numpy as np

from sklearn.datasets import load_iris

from collections import defaultdict

from operator import itemgetter

#該演算法目的是通過這四個特徵中的乙個以分辨種類,即,如果某一植物的特徵feature_index 的離散值為valu

#那麼該植物最有可能是most_frequent_class,錯誤率為error

#x為離散後的資料,y_true為每組資料的植株種類,feature_index為以第幾個特徵為標準,value為特徵值

def train_feature_value(x,y_true,feature_index,value):

class_counts = defaultdict(int)

for sample,y in zip(x,y_true):

if sample[feature_index] == value:

class_counts[y]+=1

sorted_class_counts = sorted(class_counts.items(),key=itemgetter(1),reverse=true)

print(sorted_class_counts)

most_frequent_class = sorted_class_counts[0][0]

print(most_frequent_class)

incorrect_predictions = [class_count for class_vlue,class_count in class_counts.items() if class_vlue != most_frequent_class]

print(incorrect_predictions)

error = sum(incorrect_predictions)

return most_frequent_class,error

if __name__ == '__main__':

#從scikit-learn庫中讀取內建的「iris植物分類資料集」

dataset = load_iris()

x = dataset.data#每株植物的四個特徵

y = dataset.target#每株植物的種類,有4個種類

#求4個特徵的平均值

attribute_means = x.mean(axis=0)

#當該值大於平局值時為1,小於平局值時為0,完成原始資料的離散化

x_d = np.array(x>=attribute_means,dtype='int')

train_feature_value(x_d,y,0,1)

#todo

predictors = {}

errors =

Python資料探勘入門與實踐 OneR分類演算法

oner演算法是根據已有的資料中,具有相同特徵值的個體最可能屬於哪個類別進行分類。在本例中,只需選區iris是個特徵中分類效果最好的乙個作為分類依據。資料集的特徵為連續值,把連續值轉變為類別行,這個過程叫作離散化。每條資料集中給出了四個特徵 sepal length,sepal width,peta...

python簡單演算法整理

氣泡排序 def func alist for x in range 1,len alist for i in range 0,len alist x if alist i alist i 1 alist i alist i 1 alist i 1 alist i return alist prin...

Python中簡單的遞迴演算法

可以遞迴的問題往往在大多數情況下都可以使用迴圈代替,並且迴圈的效率往往更高。但遞迴的 可讀性非常強,非常適合於效能要求不高的問題實現和後期 的維護。1 求階乘,階乘和冪級數是兩個最經典的遞迴函式。假設要計算數n的階乘,b的階乘的定義為n n 1 n 2 1,其中n必須為無符號整數 unsigned ...