距离变量及特征预处理、超参数选择方法

一、距离变量

欧氏距离 Euclidean Distance 

曼哈顿距离(Manhattan Distance)  

切比雪夫距离 Chebyshev Distance  

闵可夫斯基距离 Minkowski Distance 闵氏距离  

其中p是一个变参数: 当 p=1 时,就是曼哈顿距离;

当 p=2 时,就是欧氏距离;

当 p→∞ 时,就是切比雪夫距离

根据 p 的不同,闵氏距离可表示某一类种的距离

二、特征预处理

1、归一化

通过对原始数据进行变换把数据映射到【mi,mx】(默认为[0,1])之间

  

归一化代码实现:

1.sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… ) feature_range 缩放区间

2. fit_transform(X) 将特征进行归一化缩放

import numpy as np
from sklearn.preprocessing import MinMaxScaler
def dm01_MinMaxScaler():
 # 1. 准备数据
 data = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
# 2. 初始化归一化对象
 transformer = MinMaxScaler()
# 3. 对原始特征进行变换
 data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
 print(data)

2、数据标准化:通过对原始数据进行标准化,转换为均值为0标准差为1的标准正态分布的数据

标准化代码实现:

1.sklearn.preprocessing. StandardScaler()

 2. fit_transform(X) 将特征进行归一化缩放

from sklearn.preprocessing import StandardScaler

data = [[90, 2, 10, 40],
        [60, 4, 15, 45],
        [75, 3, 13, 46]]
a = StandardScaler()
data = a.fit_transform(data)
print(data)
print('均值', a.mean_)
print('方差', a.var_)

3、正态分布

正态分布是一种概率分布,大自然很多数据符合正态分布 • 正态分布的3σ法则(68-95-99.7 法则) 也叫高斯分布,钟形分布。正态分布记作N(μ,σ ) μ决定了其位置,其标准差σ决定了分布的幅度

三、利用KNN算法对鸢尾花分类

1、加载鸢尾花数据集

from sklearn.datasets import load_iris
mydataset = load_iris()
print('\n查看数据集信息-->\n', mydataset.data[:5])
print('mydataset.target-->\n', mydataset.target)
print('mydataset.target_names-->\n', mydataset.target_names)
print('mydataset.feature_names-->\n', mydataset.feature_names)
print('\nmydataset.DESCR-->\n', mydataset.DESCR)
print('mydataset.filename-->\n', mydataset.filename)
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
mydataset = load_iris()
print(mydataset.feature_names)
iris_d = pd.DataFrame(mydataset['data'], columns=mydataset.feature_names)
iris_d['Species'] = mydataset.target
print('\niris_d-->\n', iris_d)
col1 = 'sepal length (cm)'
col2 = 'petal width (cm)'
# 3 sns.lmplot()显示
sns.lmplot(x=col1, y=col2, data=iris_d, hue='Species', fit_reg=False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title('iris')
plt.show()

2、数据集划分

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
# 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)

3、模型训练

# 导入类库
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifie
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)

4、模型评估

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)

5、总结

1 获取数据集 2 数据基本处理 3 特征工程 4 机器学习(模型训练) 5 模型评估

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值