<>概念
根据你的“邻居”判断你的类别
 <>流程
 <>KNN api 初步使用
 <>机器学习流程
 <>Scikit-learn工具
 <>安装
pip3 install scikit-learn==0.19.1 
注:需要Numpy,Scipy等库的支持
Python (>= 3.5),
 NumPy (>= 1.11.0),
 SciPy (>= 0.17.0),
 joblib (>= 0.11).
 <>检验安装
import sklearn 
 <>Scikit-learn包含内容
 <>K-近邻算法API
 <>测试
from sklearn.neighbors import KNeighborsClassifier # 构造数据 x = [[1], [5], [10], 
[20]] y = [2, 2, 6, 6] # 训练模型 # 实例化估计器对象 estimator = KNeighborsClassifier(
n_neighbors=1) # 调用fit方法 进行训练 estimator.fit(x, y) # 数据预测 ret = estimator.predict
([[2]]) print(ret) ret = estimator.predict([[30]]) print(ret) 
 <>K值的选择
 <>k近邻搜索算法
 <>KD树
 <>why
 <>what
 <>how
 <>树的建立
 * 多个维度,选择最分散的一个维度排序、取中位数进行第一次划分(这里选择x轴)
 * 根据第一次选择的维度的中位数进行左右划分(2、4、5 | 8、9),将对应的另一维度数值进行排序、取中位数划分
 * 重复上两步,直到无法划分
 <>最近领域搜索
 <>例:查(2.1,3.1)
 <>例:查(2,4.5)
 <>KD树总结
 <>scikit-learn 数据集
 <>sklearn小数据集
 <>sklearn大数据集
 <>sklearn 数据集返回值介绍
from sklearn.datasets import load_iris,fetch_20newsgroups # 小数据集获取 iris = 
load_iris() # print(iris) # 大数据集获取 # news = fetch_20newsgroups() # print(news) 
# 数据集属性描述 print("数据集特征值是:\n", iris.data) print("数据集目标值是:\n", iris["target"]) 
print("数据集特征值名字是:\n", iris.feature_names) print("数据集目标值名字是:\n", iris.
target_names) print("数据集描述是:\n", iris.DESCR) 
 <>数据可视化
from sklearn.datasets import load_iris, fetch_20newsgroups import seaborn as 
snsimport matplotlib.pyplot as plt import pandas as pd from pylab import mpl # 
设置显示中文字体 mpl.rcParams['font.sans-serif'] = ["SimHei"] # 设置正常显示符号 mpl.rcParams[
'axes.unicode_minus'] = False # 小数据集获取 iris = load_iris() # 数据可视化 iris_d = pd.
DataFrame(data=iris.data, columns=["Sepal_Length", "Sepal_Width", "Petal_length"
, "Petal_Width"]) print(iris_d) iris_d["target"] = iris.target def iris_plot(
data, col1, col2): sns.lmplot(x=col1, y=col2, data=data,hue="target",fit_reg=
False) plt.xlabel(col1) plt.ylabel(col2) plt.title("种类分布图") plt.show() iris_plot
(iris_d, "Sepal_Width", "Petal_Length") 
 <>数据集划分
from sklearn.datasets import load_iris, fetch_20newsgroups from sklearn.
model_selectionimport train_test_split x_train, x_test, y_train, y_test = 
train_test_split(iris.data, iris.target, random_state=22, test_size=0.2) print(
"训练集的特征值是:\n", x_train) print("训练集的目标值是:\n", y_train) print("测试集的特征值是:\n", 
x_test) print("测试集的目标值是:\n", y_test) x_train1, x_test1, y_train1, y_test1 = 
train_test_split(iris.data, iris.target, random_state=2, test_size=0.2) print(
"测试集的目标值是:\n", y_test) print("测试集1的目标值是:\n", y_test1) 
 <>特征预处理
 <>归一化
 <>公式
 <>api
 <>标准化
 <>公式
 <>api
 <>预处理总结
 <>案例:鸢尾花种类预测
 <>数据集介绍
# @Author : CG # @File : 03-鸢尾花种类预测.py # @Time : 2022/2/8 17:19 # @contact: 
[email protected] from sklearn.datasets import load_iris from sklearn.
model_selectionimport train_test_split from sklearn.preprocessing import 
StandardScalerfrom sklearn.neighbors import KNeighborsClassifier # 1.获取数据集 iris 
= load_iris() # 2.数据基本处理 不同的random_state将导致训练集和测试集的不同,进而导致最终准确率不同 x_train, 
x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2
, random_state=22) # 3.特征工程 transfer = StandardScaler() x_train = transfer.
fit_transform(x_train) x_test = transfer.transform(x_test) #fit(): 
用来计算mean(均值)和std(标准差),以便后面进行数据的标准化 #transform(): 根据fit()函数计算的mean和std对数据进行标准化 
#fit_transform(): 是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化) # 
fit_transform方法是fit和transform的结合, # fit_transform(X_train) 
意思是找出X_train的平均值和标准差,并应用在X_train上。 # 这时对于X_test,我们就可以直接使用transform方法。 # 
因为此时StandardScaler已经保存了X_train的平均值和标准差。 
#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。
# 4.机器学习(模型训练)knn # 实例化估计器 estimator = KNeighborsClassifier(n_neighbors=5) # 
模型训练 estimator.fit(x_train, y_train) # 5.模型评估 # 预测值结果输出 y_pre = estimator.
predict(x_test) print("预测值是:\n", y_pre) print("预测值与真实值的对别是:\n", y_pre == y_test)
# 准确率计算 score = estimator.score(x_test, y_test) print(score) 
 <>KNN算法总结
 <>优点
 <>缺点
 <>交叉验证,网格搜索
 <>什么是交叉验证
 <>什么是网格搜索
 <>交叉验证,网格搜索(模型选择与调优)API
# @Author : CG # @File : 03-鸢尾花种类预测.py # @Time : 2022/2/8 17:19 # @contact: 
[email protected] from sklearn.datasets import load_iris from sklearn.
model_selectionimport train_test_split, GridSearchCV from sklearn.preprocessing 
import StandardScaler from sklearn.neighbors import KNeighborsClassifier # 
1.获取数据集 iris = load_iris() # 2.数据基本处理 x_train, x_test, y_train, y_test = 
train_test_split(iris.data, iris.target, test_size=0.2, random_state=22) # 
3.特征工程 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) 
x_test= transfer.transform(x_test) #fit(): 用来计算mean(均值)和std(标准差),以便后面进行数据的标准化 
#transform(): 根据fit()函数计算的mean和std对数据进行标准化 #fit_transform(): 
是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化) # 
fit_transform方法是fit和transform的结合, # fit_transform(X_train) 
意思是找出X_train的平均值和标准差,并应用在X_train上。 # 这时对于X_test,我们就可以直接使用transform方法。 # 
因为此时StandardScaler已经保存了X_train的平均值和标准差。 
#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。
# 4.机器学习(模型训练)knn # 实例化估计器 estimator = KNeighborsClassifier(n_neighbors=5) # 
模型调优 - 交叉验证,网格搜索 param_grid = {"n_neighbors": [1, 3, 5, 7]} estimator = 
GridSearchCV(estimator, param_grid=param_grid, cv=5) # 模型训练 estimator.fit(
x_train, y_train) # 5.模型评估 # 预测值结果输出 y_pre = estimator.predict(x_test) print(
"预测值是:\n", y_pre) print("预测值与真实值的对别是:\n", y_pre == y_test) # 准确率计算 score = 
estimator.score(x_test, y_test) print(score) # 交叉验证、网格搜索结果 print(
"交叉验证、网格搜索的最好结果是:\n", estimator.best_score_) print("交叉验证、网格搜索的最好模型是:\n", 
estimator.best_estimator_) print("交叉验证、网格搜索的模型结果是:\n", estimator.cv_results_) 
 <>常见距离公式
 <>欧式距离
 <>曼哈顿距离
 <>切比雪夫距离
 <>闵可夫斯基距离
 <>常见距离小结
 <>其他距离公式
 <>标准化欧式距离
 <>余弦距离
 <>汉明距离
 <>杰卡德距离
 <>马氏距离