文章目录
- 一、K近邻算法
- 1.1 先画一个散列图
- 1.2 使用K最近算法建模拟合数据
- 1.3 进行预测
- 1.4 K最近邻算法处理多元分类问题
- 1.5 K最近邻算法用于回归分析
- 1.6 K最近邻算法项目实战-酒的分类
- 1.6.1 对数据进行分析
- 1.6.2 生成训练数据集和测试数据集
- 1.6.3 使用K最近邻算法对数据进行建模预测
- 1.6.4 对新数据进行分类
- 二、广义线性模型
- 2.1线性模型的一般公式
- 2.2 通过数据集绘制
- 2.2.1 查看系数和截距
- 2.3 最基本的线性模型-回归
- 实战:糖尿病
- 2.4 使用L2正则化的线性模型-岭回归
- 2.4.1 岭回归的原理
- 2.5 使用L1正则化的线性模型-套索回归
- 三、朴素贝叶斯基本概念
- 3.1 贝努力朴素贝叶斯(二项式分布|0-1分布)
- 3.1.1 工作原理
- 3.2 高斯朴素贝叶斯
- 3.2.1 实战
- 四、决策树与随机森林
- 4.1 决策树
- 4.1.1 实战
- 4.2 随机森林
- 五、支持向量机SVM
- 5.1 支持向量机SVM的核函数
- 5.2 实战
- 5.2.1 多项式内核
- 5.2.2 径向基内核(RBF)
一、K近邻算法
1.1 先画一个散列图
!pip install scikit-learn
-
make_blobs: 这是一个用于生成聚类数据的函数。它可以根据指定的参数生成一个具有多个簇的随机数据集。在这个例子中,make_blobs函数生成了一个包含200个样本、每个样本有2个特征、2个簇中心和簇标准差为1的随机数据集。
-
n_samples: 指定生成的样本数量。
-
n_features: 指定每个样本的特征数量。
-
centers: 指定生成的簇中心数量。
-
cluster_std: 指定每个簇的标准差。
-
random_state: 用于控制生成随机数据的随机种子,以确保生成的数据可重现。
-
X, y = data: 将生成的数据集分别赋值给X和y变量。X是样本特征矩阵,y是样本标签向量。
-
plt.scatter: 这是一个用于绘制散点图的函数。它可以根据指定的参数绘制带有颜色映射的散点图。
-
X[:, 0], X[:, 1]: 这是对特征矩阵X进行切片操作,选择第一列和第二列的所有行作为绘制散点图的横纵坐标。
-
c=y: 指定散点的颜色映射为y,即样本标签。
-
cmap=plt.cm.spring: 指定颜色映射为plt.cm.spring,即使用春季调色板来表示不同的标签。
-
edgecolors=‘k’: 指定散点的边框颜色为黑色。
-
plt.show(): 显示绘制的散点图。
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
# 生成随机的二维数据集
# 生成了一个包含200个样本、每个样本有2个特征、2个簇中心和簇标准差为1的随机数据集
data = make_blobs(n_samples=200, n_features=2, centers=2, cluster_std=1.0, random_state=8)
X, y = data
# 绘制散点图,根据y值设置颜色和映射关系
# 使用plt.cm.spring作为颜色映射,边框颜色为黑色
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.spring, edgecolors='k')
plt.show()
1.2 使用K最近算法建模拟合数据
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
# 生成数据集
data = make_blobs(n_samples=200, n_features=2, centers=2, cluster_std=1.0, random_state=8)
X, y = data
# 创建KNN分类器
clf = KNeighborsClassifier()
# 使用数据X和标签y训练分类器
clf.fit(X, y)
# 用于画图的代码
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
# 创建网格点
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
# 将网格点转换为一维数组,然后使用分类器进行预测
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 将预测结果重塑为网格形状
Z = Z.reshape(xx.shape)
# 绘制彩色网格图
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.spring)
# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.spring, edgecolors='k')
# 设置x轴和y轴的范围
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
# 设置标题
plt.title("KNN")
# 显示图像
plt.show()
1.3 进行预测
# 进行判断预测
plt.scatter(6.75,4.82,marker='*',c='red',s=200)
# 显示图像
plt.show()
# 对新数据点分类进行判断
new_data = [[6.75, 4.82]]
print("新数据点的分类是",clf.predict(new_data))
1.4 K最近邻算法处理多元分类问题
这里可以把样本量修改成500个,数据类型也修改成5个
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_blobs
# 生成随机的二维数据集
# 生成了一个包含200个样本、每个样本有2个特征、2个簇中心和簇标准差为1的随机数据集
from sklearn.neighbors import KNeighborsClassifier
# 生成随机的二维数据集
# 生成了一个包含500个样本、每个样本有2个特征、5个簇中心和簇标准差为1的随机数据集
data = make_blobs(n_samples=500, n_features=2, centers=5, cluster_std=1.0, random_state=8)
X, y = data
# 绘制散点图,根据y值设置颜色和映射关系
# 使用plt.cm.spring作为颜色映射,边框颜色为黑色
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.spring, edgecolors='k')
plt.show()
再次使用K最近算法进行建模
clf = KNeighborsClassifier()
# 使用数据X和标签y训练分类器
clf.fit(X, y)
# 用于画图的代码
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
# 创建网格点
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
# 将网格点转换为一维数组,然后使用分类器进行预测
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 将预测结果重塑为网格形状
Z = Z.reshape(xx.shape)
# 绘制彩色网格图
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.spring)
# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.spring, edgecolors='k')
# 设置x轴和y轴的范围
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
# 设置标题
plt.title("KNN")
# 显示图像
plt.show()
看一下正确率
print('模型的正确率{:.2f}',format(clf.score(X,y)))
1.5 K最近邻算法用于回归分析
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression
# 生成随机的二维数据集
# n_features 表示数据集的特征数
# n_informative 表示数据集中有多少个有意义的特征
# noise 表示噪声的大小
# random_state 表示随机数种子
X, y= make_regression(n_features=1, n_informative=1, noise=50, random_state=8)
# 绘制散点图
plt.scatter(X, y, c='orange', edgecolors='k')
plt.show()
进行分析
from sklearn.neighbors import KNeighborsClassifier
# 创建KNN分类器
# n_neighbors:用于确定KNN算法中邻居的数量
reg = KNeighborsClassifier(n_neighbors=5)
# 用于KNN模型进行拟合
reg.fit(X, y)
# 把预测结果绘制出来
z=np.linspace(-3,3,200).reshape(-1,1)
plt.scatter(X,y, c='orange', edgecolors='k')
plt.plot(z, reg.predict(z), c='k',linewidth=3)
# 向量图添加标题
plt.title('KNN')
plt.show()
进行评分
print('模型的正确率{:.2f}'.format(reg.score(X,y)))
可以调整,改变这一情况
# n_neighbors:用于确定KNN算法中邻居的数量
reg = KNeighborsRegressor(n_neighbors=2)
1.6 K最近邻算法项目实战-酒的分类
1.6.1 对数据进行分析
from sklearn.datasets import load_wine
wine_dataset = load_wine()
# 打印酒数据集中的键
print('打印酒数据集中的键')
print(wine_dataset.keys())
print("=============")
# 使用.shape属性查看数据的概况
print('查看数据的概况')
print(wine_dataset.data.shape)
print("=============")
print('查看数据集的描述')
print(wine_dataset.DESCR)
print("=============")
1.6.2 生成训练数据集和测试数据集
# 成训练数据集和测试数据集
from sklearn.model_selection import train_test_split
# random_state参数是用于控制数据集划分的随机性的参数。在使用train_test_split函数划分数据集时,可以通过设置random_state参数的值来确保每次运行代码时得到相同的训练集和测试集。
# random_state参数可以接受一个整数作为输入。当设置了random_state的值时,每次运行代码时都会得到相同的随机划分结果。这对于实验的可重复性和结果的稳定性非常重要。
# 如果不设置random_state参数,每次运行代码时都会得到不同的训练集和测试集划分结果。这在某些情况下可能是需要的,例如在对模型进行交叉验证或比较不同划分方式的性能时。
# 示例代码中的random_state=0表示设置随机种子为0,这样每次运行代码时都会得到相同的训练集和测试集划分结果。你可以根据需要选择合适的随机种子值,或者不设置random_state参数以获取不同的划分结果。
X_train, X_test, y_train, y_test = train_test_split(wine_dataset.data, wine_dataset.target, random_state=0)
# 使用.shape属性查看数据的概况
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
print("=============")
1.6.3 使用K最近邻算法对数据进行建模预测
# 导入K最近邻分类器模型
from sklearn.neighbors import KNeighborsClassifier
# 创建一个K值为1的K最近邻分类器
knn = KNeighborsClassifier(n_neighbors=1)
# 使用训练集对K最近邻分类器进行拟合
knn.fit(X_train, y_train)
print('查看准确率准确率')
print(knn.score(X_test, y_test))
1.6.4 对新数据进行分类
import numpy as np
X_new = np.array([[11.4, 1.7, 2.3, 15.6, 127, 0.9978, 3.36, 0.49, 8.5, 0.0,2,1,1]])
prediction = knn.predict(X_new)
print('查看对新数据的分类结果')
print(prediction)
print(wine_dataset['target_names'][prediction])1
二、广义线性模型
2.1线性模型的一般公式
画一个直线方程式y=0.5x+3
# 画一个直线方程式y=0.5x+3
import matplotlib.pyplot as plt
import numpy as np
# x在-5到5之间,元素数为100的等差数列
x = np.linspace(-5, 5, 100)# [[-5.0,-4.8989899,-4.7979798 ... 4.8989899 5.0]]
y = y=0.5*x+3 # 直线方程式y=0.5x+3
# 绘制直线
plt.plot(x, y,c='orange')
# 添加坐标轴标签和图标题
plt.xlabel('x')
plt.ylabel('y')
plt.title('y=0.5x+3')
通过两个点画一个直线
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 创建训练数据
X = [[1], [4]] # 自变量,即x的取值
y = [3, 5] # 因变量,即对应的y值
# 创建并拟合线性回归模型
model = LinearRegression()
model.fit(X, y)
# 创建用于绘制直线的自变量范围
z = np.linspace(0, 5, 20) # 在0到5之间生成20个点
# 绘制散点图
plt.scatter(X, y, s=80, c='red')
# 绘制拟合的直线
plt.plot(z, model.predict(z.reshape(-1, 1)), c='green')
# 设置标题和图例
plt.title('Straight Line')
# 显示图形
plt.show()
# 所得他们的直线方程式y=0.667x+2.333
print('y={:3f}'.format(model.coef_[0]),'x','+ {:3f}'.format(model.intercept_))
2.2 通过数据集绘制
import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
X=[[1],[4],[3]]
y=[3,5,3]
model=LinearRegression().fit(X,y)
z=np.linspace(0,5,20)
plt.scatter(X,y,s=80,c='red')
plt.plot(z,model.predict(z.reshape(-1,1)),c='green')
plt.title('Straight Line')
plt.show()
# 所得他们的直线方程式y=0.667x+2.333
print('y={:3f}'.format(model.coef_[0]),'x','+ {:3f}'.format(model.intercept_))
import numpy as np
from matplotlib import pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
X, y = make_regression(n_samples=50, n_features=1, n_informative=1, noise=50, random_state=1)
model=LinearRegression().fit(X,y)
z=np.linspace(-3,3,200)
plt.scatter(X,y,s=80,c='red')
plt.plot(z,model.predict(z.reshape(-1,1)),c='green')
plt.title('Straight Line')
plt.show()
# 所得他们的直线方程式y=0.667x+2.333
print('y={:3f}'.format(model.coef_[0]),'x','+ {:3f}'.format(model.intercept_))
2.2.1 查看系数和截距
# 查看系数和截距
print('系数:',model.coef_[0])
print('截距:',model.intercept_)
2.3 最基本的线性模型-回归
n_features和n_informative都是用于控制生成回归数据集的参数。
-
n_features表示生成数据集时自变量的数量。在回归分析中,自变量是影响因变量的变量。通过指定n_features的值,可以控制生成数据集时自变量的数量。
-
n_informative表示在生成数据集时有用的自变量的数量。在回归分析中,有用的自变量是真正与因变量相关的变量。通过指定n_informative的值,可以控制生成数据集时有用的自变量的数量。
举个例子:
如果n_features=5,n_informative=3,则生成的数据集中会有5个自变量,其中有3个是与因变量相关的有用自变量,而另外2个则是与因变量不相关的无用自变量。
通过调整这两个参数的值,可以模拟不同的实际情况,用于测试和验证回归模型的性能。
相关文章
- 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
- 精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
- 机器学习之局部加权、岭回归和前向逐步回归
- Nodejs全站开发学习系列 & 深入浅出Node学习笔记 & Spider抓取
- [Machine Learning & Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族
- 推荐《深入浅出深度学习原理剖析与python实践》PDF+代码
- 扩展修订 | 深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」
- 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
- 读《深入浅出MySQL:数据库开发、优化与管理维护》,学习了第一章
- 《深入浅出MySQL:数据库开发、优化与管理维护(2nd)》第31章之MySQL异步复制搭建学习笔记