Knn算法:k 个 nearest neighbor 的目标值决定当前数据的目标值 其中k 由自己设定
其中 分类问题就是k个目标值个数最多的那个 回归问题就是k个值的平均值
# 1. 获取数据集
# 鸢尾花数据 第一次导入会自动联网下载 之后导入不用再下载
from sklearn.datasets import load_iris
iris_data = load_iris() #获得数据集
print(iris_data) #查看数据集 发现数据集是字典套numpy.array类型的
print(iris_data.data)#获取数据集数据
print(iris_data.feature_names)#获取数据集特征名字
print(iris_data.target_names)#获取数据集目标名字
print(iris_data.target)#获取数据集目标
print(iris_data.filename)#获取数据集所在文件目录
# 2. 数据基本处理(利用pandas等工具进行处理缺失值和异常值等等)
# 由于鸢尾花案例已经处理过数据 这里将不再处理
# 下面进行数据可视化
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 2.1 将数据集的data部分转化成dataframe类型来数据可视化
iris_data_df = pd.DataFrame(iris_data.data,columns=iris_data.feature_names)
# 2.2 将数据集的target加到上面的df对象中成为新的一类 就叫Species列来表示鸢尾花
iris_data_df['Species'] = iris_data.target
# 2.3 画图
sns.lmplot(x='petal length (cm)',y='petal width (cm)',data=iris_data_df,hue='Species',fit_reg=False)
#hue 表示根据Species分颜色区分
plt.show()
# 3. 特征工程
# 3.1 数据集划分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(iris_data.data,iris_data.target,test_size=0.3,random_state=22)
# 3.2 特征预处理——标准化 归一化容易受异常的影响 所以大多数情况下使用标准化来预处理数据
from sklearn.preprocessing import StandardScaler
# 标准化 从preprocessing中导入StandardScaler 归一化就导入 MinMaxScale
transfer = StandardScaler() #实例化特征工程方法
X_train = transfer.fit_transform(X_train)#将训练集的特征标准化
X_test = transfer.transform(X_test)#将测试集的特征标准化 注意这里不要使用fit方法
#因为 fit方法是算出数据集的平均值和方差再传回到transform中,我们这里要使用训练集的平均值和方差
#来标准化测试集 所以不要使用fit方法
# 4. 机器学习(模型训练)
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train,y_train)
# 5. 模型预测
print(knn.predict(X_test))
print(knn.predict_proba(X_test))
# 6. 模型评估
# 方式一
print(knn.score(X_test,y_test))
# 方式二
from sklearn.metrics import accuracy_score
y_pred = knn.predict(X_test)
print(accuracy_score(y_test,y_pred))