KNN算法对鸢尾花分类

1. 特征预处理

 1.1 归一化

   归一化(Normalization)是数据预处理中的一种常用技术,目的是将数据的数值范围调整到一个特定的区间,通常是[0, 1],以便于不同特征之间的比较和加权。

      

from sklearn.preprocessing import MinMaxScaler

# 1. 准备数据
data = [[9, 2, 10, 5],
[6, 4, 15, 4],
[7, 3, 12, 4]]

# 2. 初始化归一化对象
transformer = MinMaxScaler()


# 3. 对原始特征进行变换
data = transformer.fit_transform(data)

# 4. 打印归一化后的结果
print(data)

1.2 标准化

标准化(Standardization)是数据预处理的一种技术,它将数据转换为均值为0,标准差为1的分布。

               

from sklearn.preprocessing import StandardScaler
 # 1. 准备数据 v
data = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
# 2. 初始化标准化对象
transformer = StandardScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
# 5 打印每1列数据的均值和标准差
print('transformer.mean_-->', transformer.mean_)
print('transformer.var_-->', transformer.var_)

2. KNN算法对鸢尾花分类

   2.1 操作流程

1 获取数据集
2 数据基本处理
3 数据集预处理-数据标准化
4 机器学习(模型训练)
5 模型评估
6 模型预测

  2.2 代码演示

2.2.1利用KNN算法对鸢尾花分类 -加载鸢尾花数据集

from sklearn.datasets import load_iris

def dm01_traintest_split():
# 加载鸢尾花数据集, 并显示属性
# dataset.data .target .target_names .feature_names .DES
# 加载数据集
    mydataset = load_iris()
# 查看数据集信息
    print('\n查看数据集信息-->\n', mydataset.data[:5])
# 查看目标值
    print('dataset.target-->\n', mydataset.target)
# 查看目标值名字
    print('dataset.target_names-->\n', mydataset.target_names)
# 查看特征名
    print('dataset.feature_names-->\n', mydataset.feature_names)
# 查看数据集描述
    print('\ndataset.DESCR-->\n', mydataset.DESCR)
# 数据文件路径
    print('dataset.filename-->\n', mydataset.filename)
dm01_traintest_split()

2.2.2 利用KNN算法对鸢尾花分类 -加载鸢尾花数据集

def dmo2_irisdata_show():
    iris_df = pd.DataFrame(iris_data['data'], columns=iris_data.feature_names)
    print(iris_df)
    iris_df['target'] = iris_data.target
    print(iris_df)

    feature_names = list(iris_data.feature_names)
    print(feature_names)
    for i in range(len(feature_names)):
        for j in range(i + 1, len(feature_names)):
            col1 = feature_names[i]
            col2 = feature_names[j]
            sns.lmplot(x=col1, y=col2, hue='target', data=iris_df, fit_reg=False)
            plt.xlabel(col1)
            plt.ylabel(col2)
            plt.title(f'{col1} vs {col2}')
            plt.show()
dmo2_irisdata_show()

2.2.3利用KNN算法对鸢尾花分类 - 数据集划分

from sklearn.model_selection import train_test_split
# 数据集划分
def dm03_traintest_split():
    mydataset = load_iris()
    # 2 划分数据集
    X_train, X_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target,
test_size=0.3, random_state=22)


    print('数据总数量', len(mydataset.data))
    print('训练集中的x-特征值', len(X_train))
    print('测试集中的x-特征值', len(X_test))
    print(y_train)
dm03_traintest_split()

2.2.4利用KNN算法对鸢尾花分类 – 模型训练

# 导入类库
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

def dm04_模型训练和预测():
    # 1 获取数据集
    mydataset = load_iris()
    # 2 数据基本处理
    x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2,random_state=22)
    # 3 数据集预处理-数据标准化
    transfer = StandardScaler()


    x_train = transfer.fit_transform(x_train)
    # 让测试集的均值和方法, 转换测试集数据;
    x_test = transfer.transform(x_test)
    # 4 机器学习(模型训练)
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)
    # 5 模型评估 直接计算准确率 100个样本中模型预测对了多少
    myscore = estimator.score(x_test, y_test)
    print('myscore-->', myscore)
    # 6 模型预测 # 需要对待预测数据,执行标准化
    print('通过模型查看分类类别-->', estimator.classes_)
    mydata = [[5.1, 3.5, 1.4, 0.2],
          [4.6, 3.1, 1.5, 0.2]]
    mydata = transfer.transform(mydata)
    print('mydata-->', mydata)
    mypred = estimator.predict(mydata)
    print('mypred-->\n', mypred)
    mypred = estimator.predict_proba(mydata)
    print('mypred-->\n', mypred)
dm04_模型训练和预测()

2.2.5 利用KNN算法对鸢尾花分类 – 模型评估

# 1 获取数据集
mydataset = load_iris()
# 2 数据基本处理
x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2, random_state=22)
# 3 数据集预处理-数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 让测试集的均值和方法, 转换测试集数据;
x_test = transfer.transform(x_test)
# 4 机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5-1 直接使用score函数 模型评估 100个样本中模型预测对了多少
myscore = estimator.score(x_test, y_test)
print('myscore-->', myscore)
# 5-2 利用sklearn.metrics包中的 accuracy_score 方法
y_predict = estimator.predict(x_test)
myresult = accuracy_score(y_test, y_predict)
print('myresult-->', myresult)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值