机器学习~从入门到精通(一)knn算法数据集处理训练模型

news2025/1/19 23:19:55

一、机器学习的概念

机器学习的概念: 重点在于学习 ,区别于让机器去执行我们定义好的规则

我们让机器去学习,也就是具备一定的预测能力,需要我们给机器大量的数据,以及给定对于这些数据 机器如何去看待的规则(算法)
最终得到一个模型,这个模型 具备一定的预测能力

机器学习就是从数据中自动分析获得模型,例用模型对未知数据进行预测

最早的机器学习: 垃圾邮件的分辨
传统思路:编写规则,定义垃圾邮件,让计算机执行,输入一封邮件,输出是否是垃圾邮件

鸢尾花

课程中对于数学知识的要求程度:高中数学水平,本科高等数学,线性代数,概率论至少及格水平

机器学习的典型应用: 图像识别: 简单的比如二分类问题 人脸识别
MNIST数据集

alpha go zero

课程会讲解到的内容: 学习算法的底层原理,我们也会使用代码实现部分算法
也会使用一些真实的数据集 来模拟解决实际的问题
对不同的算法进行对比试验,验证不同算法的好坏
对于同一个算法的不同参数 也会进行对比试验,不断的调参
需要掌握算法背后的思想,比如简单的告诉大家,逻辑回归可以解决分类问题,

过拟合和欠拟合的问题:

调库:不反对调库

课程包含: 算法原理学习,部分算法底层原理实现,scikit learn机器学习库的使用

课程环境搭建 :
语言:python3
库:scikit learn
工具: numpy matplotlib
IDE: jupyter

一些概念:数据集中每一列表达样本的一个特征(feature),每一行代表一个样本(sample)
样本的特征经常使用X来代表,代表矩阵
样本的目标值 y

分类任务和回归任务
二分类:猫还是狗,是否是垃圾邮件,信用贷款是否有风险,股票是涨还是跌
多分类:数字识别, 图像识别 ,使用卡风险级别
很多复杂的任务也可以转换成多分类任务,比如下围棋

回归任务:根据房屋的特征,预测房屋的价格

监督学习和无监督学习
监督学习:给机器的训练数据拥有标记或者说答案

二、knn算法

# 在sklearn中,对于数据的拟合,创建模型,是放在fit方法中
import numpy as np
from math import sqrt
from collections import Counter


class Knn:
    def __init__(self, n_neighbor=3):  # n_neighbor是超参数
        self.X_train = None
        self.y_train = None
        self.n_neighbor = n_neighbor

    def fit(self, X_train, y_train):
        #  给定x_train和y_train,得到训练模型
        assert X_train.shape[0] == len(y_train)
        self.X_train = X_train
        self.y_train = y_train
        return self

    def predict(self, X):
        # 对于给定的待预测数据,返回预测结果
        assert self.X_train is not None
        assert self.y_train is not None
        assert self.X_train.shape[1] == X.shape[1]
        # distance = []  # 保存和其他所有点的距离
        return np.array([self._predict(x) for x in X])

    def _predict(self, x):
        # 给定一个样本,求出一个结果
        distance = [sqrt(np.sum((x_train - x) ** 2)) for x_train in self.X_train]
        nearest = np.argsort(distance)
        nearest = [i for i in nearest[:self.n_neighbor]]
        top_K = [i for i in self.y_train[nearest]]
        votes = Counter(top_K)
        y_predict = votes.most_common(1)[0][0]
        return y_predict

    def __repr__(self):
        return "KnnClassifier(n_neighbor=3)"


if __name__ == '__main__':
    knn = Knn()
    print(knn)
    raw_data_X = [[3.3935,2.3312],
                  [3.1101,1.7815]]
    raw_data_Y = [0,1] # 0表示良性 1表示恶性
    X_train = np.array(raw_data_X)
    Y_train = np.array(raw_data_Y)
    knn.fit(X_train,Y_train)
    knn.predict(np.array([[2, 4], [1, 3], [3, 5]]))

三、数据集训练(jupyter的写法)

在这里插入图片描述
在这里插入图片描述
有封装好的数据集测试类型【内置的score可以直接计算准确率】
在这里插入图片描述

1.jupyter格式简单的knn算法

#!/usr/bin/env python
# coding: utf-8

# In[1]:


# knn:对于带预测的样本,我们去取理他距离最近的k个点,然后根据这些点分类做投票,投票数量最多的即是待预测数据的分类结果


# In[2]:


from sklearn.neighbors import KNeighborsClassifier


# In[3]:


knn_clf = KNeighborsClassifier()


# In[4]:


from sklearn.datasets import load_iris


# In[5]:


iris = load_iris()


# In[7]:


iris.data.shape


# In[8]:


iris.data


# In[9]:


X = iris.data
y = iris.target
knn_clf.fit(X,y)


# In[ ]:


knn_clf.predict()

2.jupyter简单的测试训练数据集

#!/usr/bin/env python
# coding: utf-8

# ### 实现train_test_split

# In[1]:


import numpy as np
from sklearn.datasets import load_iris


# In[2]:


iris = load_iris()


# In[3]:


X = iris.data
y = iris.target


# In[4]:


y


# In[5]:


shuffle_indexs = np.random.permutation(len(X))


# In[6]:


test_ratio = 0.2
test_size = int(len(X) * test_ratio)

test_indexs = shuffle_indexs[:test_size]
train_indexs = shuffle_indexs[test_size:]


# In[7]:


test_indexs.shape


# In[8]:


train_indexs.shape


# In[9]:


X_train = X[train_indexs]
y_train = y[train_indexs]

X_test = X[test_indexs]
y_test = y[test_indexs]


# In[10]:


len(X_train)


# In[11]:


len(y_train)


# In[12]:


from sklearn.neighbors import KNeighborsClassifier

knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train,y_train)


# In[13]:


y_predict = knn_clf.predict(X_test)


# In[14]:


y_predict


# In[15]:


y_test


# In[16]:


np.sum(np.array(y_predict == y_test,dtype='int'))/len(X_test)


# ### 使用sklearn中封装好的train_test_split

# In[17]:


from sklearn.model_selection import train_test_split


# In[18]:


X_train,X_test,y_train,y_test = train_test_split(X,y) # 调用sklearn中的train_test_split,返回四个结果


# In[19]:


X_train.shape


# In[20]:


X_test.shape


# In[21]:


knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train,y_train)


# In[22]:


knn_clf.predict(X_test) # 传入待预测的样本特征,得到预测结果


# In[23]:


knn_clf.score(X_test,y_test) # 传入X_test和y_test,得到预测的准确率


# In[ ]:


KNeighborsClassifier(n_neighbors=6)


3.超参数

#!/usr/bin/env python
# coding: utf-8

# In[1]:


# 超参数:在执行程序之前需要确定的参数
# knn中有没有其他的超参数呢?
#  weights :权重  uniform:不考虑距离带来的权重问题     distance:  距离做作为计算的权重


# In[2]:


from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris


# In[3]:


knn_clf = KNeighborsClassifier(weights='distance')  # 倒数


# In[4]:


from sklearn.model_selection import train_test_split
iris = load_iris()
X = iris.data
y = iris.target
X_train,X_test,y_train,y_test = train_test_split(X,y) 


# In[5]:


get_ipython().run_cell_magic('time', '', 'best_k = 0\nbest_score = 0.0\nbest_clf = None\nfor k in range(1,21):\n    knn_clf = KNeighborsClassifier(n_neighbors=k)\n    knn_clf.fit(X_train,y_train)\n    score = knn_clf.score(X_test,y_test)\n    if score>best_score:\n        best_score = score\n        best_k = k\n        best_clf = knn_clf\nprint(best_k)\nprint(best_score)\nprint(best_clf)\n')


# In[6]:


get_ipython().run_cell_magic('time', '', "best_k = 0\nbest_score = 0.0\nbest_clf = None\nbest_method = None\nfor weight in ['uniform','distance']:\n    for k in range(1,21):\n        knn_clf = KNeighborsClassifier(n_neighbors=k,weights=weight)\n        knn_clf.fit(X_train,y_train)\n        score = knn_clf.score(X_test,y_test)\n        if score>best_score:\n            best_score = score\n            best_k = k\n            best_clf = knn_clf\n            best_method = weight\nprint(best_k)\nprint(best_score)\nprint(best_clf)\nprint(best_method)\n")


# In[8]:


get_ipython().run_cell_magic('time', '', "best_k = 0\nbest_score = 0.0\nbest_clf = None\nbest_p = None\nfor p in range(1,6):\n    for k in range(1,21):\n        knn_clf = KNeighborsClassifier(n_neighbors=k,weights='distance',p=p)\n        knn_clf.fit(X_train,y_train)\n        score = knn_clf.score(X_test,y_test)\n        if score>best_score:\n            best_score = score\n            best_k = k\n            best_clf = knn_clf\n            best_p = p\n            \nprint(best_k)\nprint(best_score)\nprint(best_clf)\nprint(best_p)\n")


# In[ ]:





4.grid search

#!/usr/bin/env python
# coding: utf-8

# In[1]:


from sklearn.datasets import load_digits
import numpy as np
from matplotlib import pyplot as plt


# In[2]:


digits = load_digits()


# In[4]:


print(digits.DESCR)


# In[5]:


X = digits.data
y = digits.target

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y)


# In[7]:


X_train[1000]


# In[8]:


y_train[1000]


# In[10]:


x = X_train[1000].reshape(8,-1)
plt.imshow(x,cmap=plt.cm.binary)
plt.show()


# In[18]:


x1 = np.arange(1,17).reshape(-1,4)


# In[19]:


x1


# ### 使用sklearn中的grid search

# In[20]:


param_grid = [
    {'weights':['uniform'],
    'n_neighbors':[i for i in range(1,21)]
    },
    {
       'weights':['distance'],
        'n_neighbors':[i for i in range(1,21)],
        'p':[i for i in range(1,6)]
    }  
] # 创建网格参数,每一组参数放在一个字典中


# In[21]:


from sklearn.model_selection import GridSearchCV


# In[22]:


from sklearn.neighbors import KNeighborsClassifier


# In[23]:


knn_clf = KNeighborsClassifier()


# In[25]:


get_ipython().run_cell_magic('time', '', '# 尝试寻找最佳参数\ngrid_search = GridSearchCV(knn_clf,param_grid)\ngrid_search.fit(X_train,y_train)\n')


# In[30]:


knn_clf = grid_search.best_estimator_


# In[27]:


grid_search.best_score_


# In[28]:


grid_search.best_params_


# In[32]:


knn_clf.score(X_test,y_test)


# In[34]:


get_ipython().run_cell_magic('time', '', '# 尝试寻找最佳参数\ngrid_search = GridSearchCV(knn_clf,param_grid,verbose=2,n_jobs=-1) # verbose越大越详细,n_jobs调用几个cpu进行计算\ngrid_search.fit(X_train,y_train)\n')


# In[35]:


grid_search.best_estimator_


# In[36]:


grid_search.best_params_


# In[ ]:

5.数据归一化



import numpy as np


# In[3]:


X =np.random.randint(0,100,size=100)


# In[4]:


X = (X-np.min(X))/(np.max(X)-np.min(X))


# In[5]:


X =np.random.randint(0,100,size=100).reshape(-1,2)


# In[6]:


X = np.array(X,dtype=)


# In[11]:


X


# In[7]:


X[:,0] = (X[:,0]-np.min(X[:,0]))/(np.max(X[:,0])-np.min(X[:,0]))

在这里插入图片描述

备注

① K近邻算法
在这里插入图片描述
②sklearn中的scaler
在这里插入图片描述
③均值方差归一化
在这里插入图片描述
④曼哈顿距离
在这里插入图片描述
在这里插入图片描述

⑤明可夫斯基距离
在这里插入图片描述
⑥ 欧拉距离
在这里插入图片描述
在这里插入图片描述

⑦ 特征被时间主导
在这里插入图片描述
⑧ 最值归一化
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序框架与生命周期

目录 框架 响应的数据绑定 页面管理 基础组件 丰富的 API 逻辑层 App Service 小程序的生命周期 注册页面 使用 Page 构造器注册页面 在页面中使用 behaviors 使用 Component 构造器构造页面 页面的生命周期 页面路由 页面栈 路由方式 注意事项 模块化 模块化…

P2P之ICE协议(二)

名词解释 Transport Address:包含IP、port和传输协议。 Candidate:除了Transport Address 外还包括类型、优先级、foundation还有Base。 Base:Host candidate 关联一个 Server reflexive candidate 。 ICE的建连过程 ICE实现NAT穿透的所要…

影像组学——一个入门级汇报

影像组学1 相关综述2 发展历程3 研究背景4 影像组学工作流程5 临床应用6 影像组学的问题及挑战7 发展趋势1 相关综述 1. Radiomics the process and the challenges 2. Radiomics Extracting more information from medicalimages 3. Integrating pathomics with radiomics an…

Qt新手入门指南——创建一个基于Qt Widget的文本查找器(二)

Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本教程将介绍如何使用…

原生JS之sort排序方法详解

在JavaScript中排序主要用到的api就是sort了,但是使用sort有几个坑需要注意,让我们一起来看看 排序原理-不使用参数时 sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。 默认排序顺序为按字典升序。 在不…

CSS 如何实现羽化效果?

最近碰到这样一个问题,在一张封面上直接显示书名,可能会存在书名看不太清楚的情况(容易受到背景干扰),如下 为了解决这个问题,设计师提了一个“究极”方案,将书名背后的图片模糊一下&#xff0c…

【OpenCV-Python】教程:6-1 相机标定

OpenCV Python 相机标定 【目标】 摄像机引起的失真类型如何找到相机的内参和外参如何基于这些特性校正这些图像 【理论】 一些针孔相机会导致图像发生严重失真,主要有两种,一是径向畸变,一是切向畸变。 径向畸变使直线看起来弯曲。距离…

Spring MVC学习 | 报文信息转换

文章目录一、HttpMessageConverter二、获取请求报文信息2.1 使用原生servletAPI2.2 使用RequestBody注解获取请求体信息2.3 使用RequestEntity对象获取请求报文信息三、设置响应报文信息3.1 使用原生的servletAPI3.2 使用ResponseBody注解设置响应体信息3.3 ResponseEntity类的…

Docker 镜像构建可以分享的快乐

通过上一篇 Dockerfile 语法与指令的学习,本节就开始使用Dockerfile 来制作自己的 Docker 镜像啦。 Docker 镜像构建 新建 app.py 文件 from flask import Flaskapp Flask(__name__)app.route(/) def hello():return Hello World! Hogwarts.本代码主要功能是当我…

二十八—— 四十三

二十八、JavaScript——if-else语句 if-else语句- 语法: if(条件表达式) { 语句 }else{ 语句。。。 } - 执行流程 if-else执行时,先对条件表达式进行判断 如果结果为true,则执行if后得而语句 如果结果为false,则执行else后的语句 if-else if-…

公众号名称排名优化

HTML 实例解释 <p> 元素&#xff1a; <p>This is my first paragraph.</p> 这个 <p> 元素定义了 HTML 文档中的一个段落。 这个元素拥有一个开始标签 <p>&#xff0c;以及一个结束标签 </p>。 元素内容是&#xff1a;This is my firs…

生产环境LVM卷ext4文件系统故障修复处理

一、问题描述 某项目因存储视频流泪数据,数据量较大,生产环境当时已达158TB,采用LVM+Ext4存储,在某次LVM在线扩容过程中,扩容失败,报错:inode_counter 溢出,从字面看就i节点数量超过最大限制了,被lvresize命令忽略,报出警告:Invalid argument While checking for on…

Ac-GA-K(Ac)-AMC,577969-56-3

Ac- gak (Ac)-AMC&#xff0c;在蛋白酶偶联试验中测量组蛋白去乙酰化酶I类(HDAC 1、2、3和8)和II类(HDAC 6和10)活性的荧光底物。hdac催化Lys脱乙酰生成Ac-GAK-AM。 Ac-GAK(Ac)-AMC, fluorogenic substrate for measuring histone deacetylase class I (HDAC 1, 2, 3, and 8) a…

朴素二进制表示法

思路方案 在安全领域的研究中我们发现&#xff0c;很多数据预处理的步骤&#xff0c;在不同的场景下中都可以相互 借鉴&#xff0c;甚至可以进行直接复用。例如&#xff0c;对于加密流量相关的数据&#xff0c;当算法工程师 获取到一批加密流量的 pcap 包之后&#xff0c;不论他…

「Docker学习系列教程」基础篇小总结及高级篇预告

通过前面十来篇的学习&#xff0c;我们已经把docker基础篇学习完了。这篇文章&#xff0c;咱们就来小总结下基础篇学习的东西以及介绍接下来高级篇中&#xff0c;将会学习到哪些知识点。 基础篇总结&#xff1a; 第一篇&#xff0c; 凯哥就介绍了怎么在Centos系统中安装D…

【微服务之分布式全局Id】分布式全局ID生成

分布式全局ID解决方案 1、UUID 最容易想到的就是 UUID (Universally Unique Identifier) 了&#xff0c; UUID 的标准型式包含 32 个 16 进制数字&#xff0c;以连字号分为五段&#xff0c;形式为 8-4-4-4-12 的 36 个字符&#xff0c;这个是 Java 自带的&#xff0c;用着也简…

DBCO-PEG-Silane|DBCO-PEG-SIL|二苯并环辛炔-聚乙二醇-硅烷

DBCO-PEG-Silane&#xff0c;DBCO 试剂是一类点击化学标记试剂&#xff0c;含有非常活泼的 DBCO&#xff08;&#xff08;二苯并环辛炔&#xff09;基团&#xff0c;DBCO 试剂可以通过无铜点击化学与叠氮化物标记的分子或生物分子发生反应。DBCO 点击化学可以在水性缓冲液中运行…

用噪点滤镜回忆童年电视机的雪花屏

介绍 相信很多人80,90后的同学对童年里电视机的突然出现刺啦刺啦的雪花屏记忆犹新&#xff0c;本期将用 pixi.js 来完成一个电视机播放动漫然后突然出现雪花屏的动画&#xff0c;里面主要讲解了如何使用pixi.js播放帧动画和如何用噪点滤镜制造雪花屏。 演示 正文 初始化渲染…

web前端网页设计期末课程大作业:关于城市旅游的HTML网页设计 ——北京

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.2 OpenResty 快速入门

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.2 OpenResty 快速入门48.2.1 直接开干48 多级缓存 48.2 OpenResty 快速入门 48.2.1 直…