DAY 3学习笔记

承接上文

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>

以上就是今天的学习内容,有点长,感谢大家的观看

  • 48
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值