承接上文
1.四大常见距离的算法
欧氏距离:
欧式距离上一篇文章讲到,其实就是两点之间直线距离,不论是平面的还是空间的,直线距离就是欧氏距离
曼哈顿距离:
曼哈顿距离也比较好理解,就是两点之间x轴坐标和y轴坐标分别相减,再把两个数相加就能得到,这么说可能不好理解,一张图帮你更好理解一点
切比雪夫距离:
切比雪夫距离也好理解,我们不妨给他换个名字,叫国王距离。为什么这么说,国际象棋里的国王属于是八面玲珑了,以国王所在的格子为中心的九宫格,剩下的八个格子随便走,如图:
差不多是这么个事,而切比雪夫也一样所计算的距离是可以走斜线的,所以我们只需要两点之间x轴坐标和y轴坐标分别相减,然后最小的那个,就是切比雪夫距离
我依旧举个栗子:
闵氏距离:
闵式距离准确来时不是一个距离,他是一个集合体,这也是我觉得他最抽象的地方,这里直接上图:
从图中我们可以看到,p值不同的时候,他的距离也不一样,像一个变相怪杰,随时随地变。
2.KNN的特征预处理:
归一化和标准化有鸟用?
一些特征的单位或者大小相差过大,也有可能某一个特征的方差比其他的方差大几个量级,你瞅瞅这夺吓人
归一化:
是变化原始数据的一种方式,听着很高大上,其实就是小学算术,几个数哪个最小哪个最大看的出来吧,数字认识吧,ok那你就会归一法了
其中x为数据的值,min是其中的最小值,max是最大值,举个简单的例子:
是不是易如反掌手拿把掐了,这就是归一化
我将用代码举个具体的例子
from sklearn.preprocessing import MinMaxScaler
#准备数据
data=[
[90,2,10,40],
[60,4,15,45],
[75,3,13,46],
]
#初始化归一对象
transformer=MinMaxScaler()
#对原始特征进行变换
data=transformer.fit_transform(data)
#打印归一化结果
print(data)
第二张图是运行结果。
标准化:
归一化这么简单,这两兄弟差不多,标准化也是易如反掌:
标准化其实就可以想象成正态分布,直接上干的,不整一些华丽花哨的图,反而不好理解
直接上公式,mean就是特征值的平均值,平均值不用给各位再介绍了吧,那有兄弟要问了,标准差我不会算啊哥们,计算机计算机,不用你算
from sklearn.preprocessing import StandardScaler
#导入数据
data=[[90,2,10,40],
[60,4,15,45],
[75,3,13,46]]
#初始化标准化对象
transformers=StandardScaler()
#对原始特征进行转化
data=transformers.fit_transform(data)
#打印数据结果
print(data)
#打印每列数据的均值和标准差
print('transfer.mean -->',transformers.mean_)
print('transformer.var_-->',transformers.var_)
我们可以看到,不用你自己求标准差,python直接帮你转化了,难度骤降啊哥们
依旧上结果
3.KNN对于鸢尾花的分类实验
先带大家过一遍大致的流程吧
获取数据集----数据的基本处理----数据预处理和标准化----训练----模型评估----模型预测
数据集是很珍贵的,但你放心,python里自带鸢尾花的数据集,包拿捏的。
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
#todo 1.加载数据集
iris_data = load_iris()
#print(f'数据集-->\n{iris_data.feature_names}\n{iris_data.data[:10]}')
#print(f'\n目标值-->\n{iris_data.target_names}\n{iris_data.target}')
#todo 2.数据展示
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(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.xlabel(col2)
plt.title(f'{col1} vs {col2}')
plt.show()
#todo 3.数据基本处理
x_train,x_test,y_train,y_test = train_test_split(iris_data.data,iris_data.target,test_size=0.3)
print(f'数据总数量-->{len(iris_data.data)}')
print(f'训练集数量-->{len(x_train)}')
print(f'测试集数量-->{len(x_test)}')
#todo 4.特征处理
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
#todo 5.实例化
model = KNeighborsClassifier(n_neighbors=5)
#todo 6.训练
model.fit(x_train,y_train)
#todo 7.评估
#y_pre = model.predict(x_test)
#accuracy_score(y_test,y_pre)
#score2 = model.score(x_test,y_test)
#todo 8.预测
mydata = [[5.1,3.5,1.4,0.2],
[4.6,3.1,1.5,0.2]]
mydata = transfer.fit_transform(mydata)
predata = model.predict(mydata)
print(f'predate-->{predata}')
今个东西有点多,希望大家自己敲一遍自己消化消化。
WEB
又到了经典的web开发环节了
css样式
css,专门用来“美化”标签
1.基础CSS,写简单页面&看懂&改
2.模块,调整和修改。
<img src="..." style="height:100px" />
<div style="color:red">中国联通</div>
其中的...你自己随便加个图片链接
我们你也不用把你想要的样式写在div中,我们也可以写在head中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆界面</title>
<style>
.c1{
color:red;
}
</style>
</head>
<body>
<h1 class='c1'>用户登录</h1>
<h1 class='c1'>用户登录</h1>
<h1 class='c1'>用户登录</h1>
<h1 class='c1'>用户登录</h1>
<form method="post" action="/login">
<div>
用户名:
<input type="text" name="username">
</div>
<div>
密码:
<input type="password" name="pwd">
</div>
<div>
<input type="submit" value="提交">
</div>
</form>
</body>
</html>
我们也可以在文件中
.c1{
height:100px;
}
.c2{
color:red;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆界面</title>
<link rel="stylesheet" href="common.css"/>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login">
<div>
用户名:
<input type="text" name="username">
</div>
<div>
密码:
<input type="password" name="pwd">
</div>
<div>
<input type="submit" value="提交">
</div>
</form>
</body>
</html>
以上就是今天的学习内容,有点长,感谢大家的观看