jtyoui.ml.neighbor 源代码

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time  : 2019/11/13 10:55
# @Author: Jtyoui@qq.com
import numpy as np
from sklearn.preprocessing import LabelBinarizer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor

"""
KNN分类算法例子
"""


[文档]def knn_class_fit(train, label): """训练数据模型""" binary = LabelBinarizer() # 二值化 y_ = binary.fit_transform(label) clf = KNeighborsClassifier() clf.fit(train, np.ravel(y_)) return clf, binary
[文档]def knn_class_predict(models, predict_value): """预测模型""" predict = models[0].predict(predict_value) return models[1].inverse_transform(predict)
[文档]def knn_regress_fit(train, label): clf = KNeighborsRegressor() clf.fit(train, label) return clf
[文档]def knn_regress_predict(models, predict_value): return models.predict(predict_value)
if __name__ == '__main__': # 身高和体重去预测性别 x = np.array([ [156, 64], [170, 86], [183, 84], [191, 80], [155, 49], [163, 59], [180, 67], [158, 54], [170, 67] ]) y = np.array(['male', 'male', 'male', 'male', 'female', 'female', 'female', 'female', 'female']) test = np.array([[155, 70]]) model = knn_class_fit(x, y) print(knn_class_predict(model, test)) # 预测:['female'],正确:['female'] if __name__ == '__main__': # 利用身高和性别来预测体重 x = np.array([ [158, 1], [170, 1], [183, 1], [191, 1], [155, 0], [163, 0], [180, 0], [158, 0], [170, 0], [168, 1], [180, 1], [160, 0] ]) y = np.array([64, 86, 84, 80, 49, 59, 67, 54, 67, 65, 96, 52]) test = np.array([[169, 0]]) model = knn_regress_fit(x, y) print(knn_regress_predict(model, test)) # 预测:[65.8],正确:[67]