目录
[(1). 图像识别与计算机视觉](#(1). 图像识别与计算机视觉)
[(2). 自然语言处理 (NLP)](#(2). 自然语言处理 (NLP))
[(3). 推荐系统](#(3). 推荐系统)
[(4). 预测与分类](#(4). 预测与分类)
[(5). 医疗与生物信息](#(5). 医疗与生物信息)
[(6). 工业与制造](#(6). 工业与制造)
[(7). 游戏与娱乐](#(7). 游戏与娱乐)
[(8). 其他领域](#(8). 其他领域)
[二、KNN(K-Nearest Neighbors,K近邻算法)](#二、KNN(K-Nearest Neighbors,K近邻算法))
[(1)、欧式距离(Euclidean Distance)](#(1)、欧式距离(Euclidean Distance))
[(2)、曼哈顿距离(Manhattan Distance)](#(2)、曼哈顿距离(Manhattan Distance))
一、简介
1、什么是机器学习
机器学习是人工智能的一个分支,专注于通过数据训练模型,使计算机能够从经验中学习并改进性能,而无需显式编程。其核心是让机器从数据中识别模式,并利用这些模式进行预测或决策。一句话概括就是:利用数学中的公式 总结出 数据中的规律。机器学习主要分为三类:
-
监督学习:使用带标签的数据训练模型,用于预测或分类。
-
无监督学习:使用无标签的数据,发现数据中的结构或模式。
-
强化学习:通过试错和奖励机制,训练模型在环境中做出最优决策。
2、为什么要学习机器学习
- 信息爆炸时代,数据量太大,人工已经无法处理
- 重复性的工作交给计算机来做
- 潜在一些信息之间的关联人类不容易直接发现
- 机器学习确实有效的解决很多问题
- 机器学习应用领域非常广泛
- ........
3、机器学习可以解决哪些问题
(1). 图像识别与计算机视觉
-
人脸识别:用于安全验证、社交媒体 tagging。
-
医学影像分析:辅助诊断疾病,如癌症检测。
-
自动驾驶:识别道路、行人、交通标志等。
(2). 自然语言处理 (NLP)
-
机器翻译:如 Google 翻译。
-
情感分析:分析用户评论、社交媒体情绪。
-
聊天机器人:提供客户支持或个性化服务。
(3). 推荐系统
-
电商推荐:如亚马逊、淘宝的商品推荐。
-
内容推荐:如 Netflix、YouTube 的视频推荐。
(4). 预测与分类
-
金融风控:预测贷款违约风险。
-
销售预测:预测产品需求或销售额。
-
垃圾邮件过滤:自动识别并过滤垃圾邮件。
(5). 医疗与生物信息
-
疾病预测:基于患者数据预测疾病风险。
-
药物研发:加速新药发现和临床试验。
(6). 工业与制造
-
质量控制:检测产品缺陷。
-
预测性维护:预测设备故障,减少停机时间。
(7). 游戏与娱乐
-
游戏 AI:开发智能游戏对手。
-
内容生成:自动生成音乐、艺术或文本。
(8). 其他领域
-
气候预测:分析气候数据,预测天气变化。
-
能源优化:优化能源消耗,提高效率。
4、机器学习的步骤
收集处理数据 --->建立模型 ---> 预测结果

5、学习机器学习的准备工作
学习机器学习首先要配置好环境,如:安装好合适的第三方库。以下是进行机器学习需要的一些库:sklearn、numpy、pandas、scipy、matplotlib。
安装方法:
pip install 库名==版本号 -i 镜像地址
**注意:**安装的库版本一定要合适。后期很多报错可能都是因为第三方库版本的问题引起的。
当完成一系列的准备工作就可以开始机器学习的算法学习啦!!!
二、KNN(K-Nearest Neighbors,K近邻算法)
1、简介
KNN(K-Nearest Neighbors,K近邻算法)是一种简单且常用的监督学习 算法,主要用于分类 和回归任务。它的核心思想是:通过计算待预测样本与训练集中所有样本的距离,找到距离最近的K个样本,然后根据这些邻居的标签来预测待预测样本的标签。
2、KNN算法的优缺点
优点:
- 简单,易于理解,易于实现,无需训练;
- 适合对稀有事件进行分类;
- 对异常值不敏感。
缺点︰
- 样本容量比较大时,计算时间很长;
- .不均衡样本效果较差;
3、样本之间的距离
以下是KNN算法常用的两种距离公式
(1)、欧式距离(Euclidean Distance)

(2)、曼哈顿距离(Manhattan Distance)

(3)、机器学习中其他距离公式
闵可夫斯基距离 (Minkowski Distance)、余弦相似度 (Cosine Similarity)、切比雪夫距离 (Chebyshev Distance)、汉明距离 (Hamming Distance)、马氏距离 (Mahalanobis Distance)、杰卡德距离 (Jaccard Distance)等等**。**
4、数据预处理
(1)、数据可视化
我们有如下文本数据,一共1000行,其中前三列为特征,最后一列为标签。

可以通过如下代码将每种标签的数据进行分类,在将其进行展示
python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import xlabel, ylabel
data = np.loadtxt('./data/datingTestSet2.txt')
data_1 = data[data[:,-1] == 1]
data_2 = data[data[:,-1] == 2]
data_3 = data[data[:,-1] == 3]
# 数据可视化
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.scatter(data_1[:,0],data_1[:,1],zs=data_1[:,2],c='#00FFFF',marker='^')
ax.scatter(data_2[:,0],data_2[:,1],zs=data_2[:,2],c='#FF0000',marker='o')
ax.scatter(data_3[:,0],data_3[:,1],zs=data_3[:,2],c='#006400',marker='+')
ax.set(xlabel='X', ylabel='Y', zlabel='Z')
plt.show()

(2)、分割特征与标签
将特征储存在变量x中,标签储存在变量y中
python
# KNN算法
data = np.loadtxt('./data/datingTestSet2.txt')
# 特征
x = data[:,:-1]
# 类别
y = data[:,-1]

5、KNN算法处理分类问题
分类任务的目标是将输入数据划分到预定义的类别(标签)中。
python
sklearn.neighbors.KNeighborsClassifier(
n_neighbors=5,
weights='uniform',
algorithm='auto',
leaf_size=30,
p=2,
metric='minkowski',
metric_params=None,
n_jobs=None,
**kwargs)
# n_neighbors:用于指定邻近数据的数量
# p:用于指定距离度量方式,默认为欧式距离,其中p=1是曼哈顿距离,p=2是欧式距离
实战代码
python
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# KNN算法
data = np.loadtxt('./data/datingTestSet2.txt')
# 特征
x = data[:,:-1]
# 类别
y = data[:,-1]
neigh = KNeighborsClassifier(n_neighbors=10,metric='euclidean')
'''参数metric = 参数p
p = 1是曼哈顿距离;p = 2是欧式距离;p为其他值是闵可夫斯基距离
neigh = KNeighborsClassifier(n_neighbors=10,p=2)'''
# 训练
neigh.fit(x,y)
# 预测(单个数据)
print(neigh.predict([[50000,8.2,1.01]]))
# 预测(同时预测多个数据)
predict_data = [[12222,2,0.5],
[23321,0.5,1],
[1222,8,0.7],
[45788,2.3,1.2]]
print(neigh.predict(predict_data))

6、KNN算法处理回归任务
回归任务的目标是预测一个连续值。
python
sklearn.neighbors.KNeighborsRegressor(
n_neighbors=5,
weights='uniform',
algorithm='auto',
leaf_size=30,
p=2,
metric='minkowski',
metric_params=None,
n_jobs=None,
**kwargs
)
# n_neighbors:用于指定邻近数据的数量
# p:用于指定距离度量方式,默认为欧式距离,其中p=1是曼哈顿距离,p=2是欧式距离
实战代码
python
import numpy as np
from sklearn.neighbors import KNeighborsRegressor
data = np.loadtxt('./data/fangjia.txt',encoding='utf-8')
# 特征
x = data[:,:-1]
# 结果
y = data[:,-1]
result = KNeighborsRegressor(n_neighbors=5)
result1 = KNeighborsRegressor(n_neighbors=7)
result.fit(x,y)
result1.fit(x,y)
print('k=5的预测结果:',result.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
print('k=7的预测结果:',result1.predict([[2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
