python 알고리즘 연습One Rule 알고리즘(상세 설명)
지금 은 코드 로 알고리즘 을 실현 합 니 다.
# 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]
\#얻 은 것 은 xtest 의 첫 번 째 열 데이터.아래 코드 로 얻 은 것 은 x테스트 의 첫 줄 데이터.
print x_test[0]
\#차이 점 주의
이상 이 python 알고리즘 연습One Rule 알고리즘(상세 설명)은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.