模式识别涉及的常用算法

一、线性回归

1.算法执行流程:

算法的执行流程可以简述如下:

  1. 导入必要的库
    • 导入NumPy库,用于数值计算。
    • 导入Matplotlib库,用于数据可视化。
    • 导入Pandas库,用于数据处理(尽管在这个例子中,Pandas主要用于读取CSV文件,但并未在后续训练模型中使用)。
    • 导入Scikit-learn库中的LinearRegression模型,用于线性回归模型的训练。
  2. 定义真实函数
    • 定义了一个名为true_fun的函数,该函数表示数据的真实模型(ground truth)。
  3. 设置随机种子和样本数量
    • 使用np.random.seed(0)设置随机种子,以确保结果的可复现性。
    • 设置n_samples为30,表示生成的训练样本数量。
  4. 生成随机数据作为训练集
    • 在0到1之间随机生成n_samples个排序后的点,作为X_train。
    • 根据true_fun函数计算y值,并加上一些随机噪声(标准差为0.05的正态分布),得到y_train。
  5. 读取CSV文件(但此部分数据并未在后续模型训练中使用):
    • 使用Pandas的read_csv函数读取名为'Salary_dataset.csv'的文件。
    • 提取数据集中的某些列作为X和Y(尽管这部分数据在后续并未被使用)。
  6. 定义并训练模型
    • 实例化LinearRegression模型。
    • 使用X_train和y_train数据训练模型。
  7. 输出模型参数
    • 打印出模型的权重(w)和截距(b)。
  8. 生成测试数据并可视化
    • 生成一个从0到1的等差数列作为X_test,用于可视化。
    • 使用训练好的模型对X_test进行预测。
    • 使用Matplotlib绘制真实函数、模型预测结果以及训练数据点。
  9. 显示图形
    • 使用Matplotlib的show函数显示绘制的图形。

需要注意的是,虽然算法读取了CSV文件,但在后续的模型训练和可视化过程中,并没有使用这些数据。模型是基于随机生成的带有噪声的数据进行训练和可视化的。如果目的是使用CSV文件中的数据进行训练和可视化,那么应该使用这些数据替换掉随机生成的数据。

2.代码:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd  #
from sklearn.linear_model import LinearRegression # 导入线性回归模型


def true_fun(X): # 这是我们设定的真实函数,即ground truth的模型
    return 1.5*X + 0.2

np.random.seed(0) # 设置随机种子
n_samples = 30 # 设置采样数据点的个数

'''生成随机数据作为训练集,并且加一些噪声'''
X_train = np.sort(np.random.rand(n_samples))
y_train = (true_fun(X_train) + np.random.randn(n_samples) * 0.05).reshape(n_samples,1)

# print(X_train)
# print(y_train)

'''读取csv文件'''
df = pd.read_csv('Salary_dataset.csv')
X = df.iloc[:, 1:2]
Y = df.iloc[:, 2:3]
print("训练数据 X:")
print(X.head())
print("\n训练标签 Y:")
print(Y.head())

#exit()

model = LinearRegression() # 定义模型
model.fit(X_train[:,np.newaxis], y_train) # 训练模型
print("输出参数w:",model.coef_) # 输出模型参数w
print("输出参数b:",model.intercept_) # 输出参数b


X_test = np.linspace(0, 1, 100)
# print(X_test)
plt.plot(X_test, model.predict(X_test[:, np.newaxis]), label="Model")
plt.plot(X_test, true_fun(X_test), label="True function")
plt.scatter(X_train,y_train) # 画出训练集的点
plt.legend(loc="best")
plt.show()

3.结果:

二、贝叶斯分类

1.算法执行流程:

代码执行流程简述如下:

  1. 导入必要的库
    • 导入numpy用于数值计算。
    • 导入matplotlib.pyplot用于绘图。
    • 导入seaborn并设置默认样式。
    • 导入sklearn.datasets中的make_blobs函数用于生成模拟数据集。
    • 导入sklearn.naive_bayes中的GaussianNB类用于构建朴素贝叶斯分类器。
  2. 生成随机数据
    • 使用make_blobs函数生成一个包含100个样本、2个特征、2个中心点的模拟数据集。
    • 样本点围绕两个中心点随机分布,标准差为1.5。
  3. 绘制原始数据散点图
    • 使用plt.scatter函数绘制原始数据的散点图,其中x轴和y轴分别对应数据集中的两个特征。
    • 使用c=y参数将数据点的颜色根据其对应的类别(标签)设置。
    • 展示绘制的图形。
  4. 构建并训练朴素贝叶斯分类器
    • 实例化GaussianNB类,创建一个高斯朴素贝叶斯分类器对象。
    • 使用model.fit(X, y)方法训练分类器。
  5. 生成测试集
    • 创建一个固定点[-6, -14]和一个随机点集[14, 18] * rng.rand(2000, 2),其中rng是一个随机状态为0的随机数生成器。
    • 将这两个点集合并形成测试集X_test
  6. 对测试集进行预测并绘制结果
    • 使用model.predict(X_test)方法对测试集进行预测,得到预测类别y_pred
    • 绘制原始数据的散点图(与步骤3相同)。
    • 保存当前图形的坐标轴范围(lim = plt.axis())。
    • 绘制测试集数据的散点图,使用c=y_pred设置颜色,s=20设置点的大小,alpha=0.1设置透明度。
    • 恢复原始图形的坐标轴范围(plt.axis(lim)),确保新旧数据点在同一坐标系中。
    • 展示绘制的新图形,其中包含了原始数据和测试集的预测结果。
  7. 输出预测概率
    • 使用model.predict_proba(X_test)方法获取测试集中每个样本对每个类别的预测概率。
    • 打印出测试集中最后8个样本的预测概率,并保留两位小数。

这段代码的目的是演示如何使用高斯朴素贝叶斯分类器对二维数据进行分类,并展示分类结果。同时,它还展示了如何使用Matplotlib绘制散点图,并通过颜色区分不同类别的数据点。

2.代码:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=100, n_features=2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:,0], X[:,1], c=y, s=50, cmap='RdBu')
plt.show()

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X, y)
rng = np.random.RandomState(0)
X_test = [-6, -14] + [14, 18]*rng.rand(2000, 2)
y_pred = model.predict(X_test)

plt.scatter(X[:,0], X[:,1], c=y, s=50, cmap='RdBu')
lim=plt.axis()
plt.scatter(X_test[:,0], X_test[:,1], c=y_pred, s=20, cmap='RdBu', alpha=0.1)
plt.show()
yprob = model.predict_proba(X_test)
print(yprob[-8:].round(2))

3.结果:

三、线性SVM

1.算法执行流程:

算法执行流程简述如下:

  1. 导入必要的库
    • 导入numpy库用于数值计算。
    • 导入matplotlib.pyplot库用于绘图。
    • sklearn库中导入svm模块,用于支持向量机(SVM)算法。
  2. 准备数据集
    • 使用numpy创建一个二维数组data,表示数据集的特征。
    • 创建一个标签列表label,其中前六个数据的标签为1,后六个为0。
  3. 确定绘图范围
    • 计算数据集在每个特征维度上的最小值和最大值,并扩展一定的范围以绘制完整的分类边界。
    • 使用np.meshgrid函数生成网格点,这些点将用于评估分类器的预测结果并绘制分类边界。
  4. 创建并训练SVM分类器
    • 实例化一个svm.SVC对象,指定使用线性核('linear')和惩罚参数C(在这里设置为0.001)。
    • 使用fit方法训练SVM分类器,传入数据集data和对应的标签label
  5. 预测和绘制分类边界
    • 使用predict方法预测网格点上的分类结果,并将结果存储在Z中。
    • Z的形状调整为与网格xxyy相同的二维数组。
    • 使用plt.contourf函数绘制分类边界,其中xxyy定义了网格点,Z是预测的分类结果,cmap参数用于指定颜色映射。
  6. 绘制数据点
    • 使用plt.scatter函数绘制数据集中的点,其中前六个点(标签为1)用红色'o'表示,后六个点(标签为0)用黑色'x'表示。
  7. 添加标题并展示图形
    • 使用plt.title函数为图形添加标题。
    • 使用plt.show函数显示绘制的图形。

在这个流程中,线性SVM分类器通过训练学习一个决策边界(也称为超平面),该边界能够最好地将不同类别的数据点分开。C参数(惩罚系数)在SVM中用于控制分类器的复杂度和对错误分类的容忍度。在训练完成后,分类器能够预测新数据点的类别,并绘制出分类边界,从而可视化分类器的决策区域。

2.代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
data = np.array([
    [0.1, 0.7],
    [0.3, 0.6],
    [0.4, 0.1],
    [0.5, 0.4],
    [0.8, 0.04],
    [0.42, 0.6],

    [0.9, 0.4],
    [0.6, 0.5],
    [0.7, 0.2],
    [0.7, 0.67],
    [0.27, 0.8],
    [0.5, 0.72]
])

label = [1]*6 + [0]*6
x_min, x_max = data[:,0].min()-0.2, data[:,0].max()+0.2
y_min, y_max = data[:,1].min()-0.2, data[:,1].max()+0.2
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.002), np.arange(y_min, y_max, 0.002))
print(xx)

model_linear = svm.SVC(kernel='linear', C=0.001)
model_linear.fit(data, label)
Z = model_linear.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.ocean, alpha=0.6)
plt.scatter(data[:6,0], data[:6,1], marker='o', color='r', s=100, lw=3)
plt.scatter(data[6:,0], data[6:,1], marker='x', color='k', s=100, lw=3)
plt.title('linear SVM')
plt.show()

3.结果:

四、Bagging

1.算法执行流程:

算法执行流程简述如下:

  1. 数据加载与预处理
    • 使用sklearn.datasetsload_wine()函数加载葡萄酒数据集。
    • 打印出数据集中所有特征的名字(wine.feature_names)。
    • 将数据集的特征部分(wine.data)转换为pandasDataFrame对象X,并设置特征名字。
    • 将数据集的标签部分(wine.target)转换为pandasSeries对象y
  2. 数据分割
    • 使用train_test_split函数将数据集Xy分割为训练集(80%)和测试集(20%)。
  3. 构建并训练决策树分类器
    • 初始化一个决策树分类器base_model,设置最大深度为1,特征选择标准为基尼指数,并指定随机状态。
    • 使用训练集X_trainy_train训练决策树分类器。
    • 使用训练好的决策树分类器对测试集X_test进行预测,得到预测结果y_pred
    • 计算并打印决策树分类器在测试集上的准确率。
  4. 构建并训练Bagging分类器
    • 初始化一个Bagging分类器model,设置基本估计器为前面训练的决策树分类器base_model,最大的弱学习器个数为50,并指定随机状态。
    • 使用训练集X_trainy_train训练Bagging分类器。
    • 使用训练好的Bagging分类器对测试集X_test进行预测,得到预测结果y_pred
    • 计算并打印Bagging分类器在测试集上的准确率。
  5. 测试估计器个数对Bagging分类器的影响
    • 创建一个列表x,包含从2到102的偶数,表示要测试的估计器(即弱学习器)的个数。
    • 创建一个空列表y,用于存储每个估计器个数对应的Bagging分类器在测试集上的准确率。
    • 遍历列表x中的每个估计器个数:
      • 初始化一个新的Bagging分类器,设置基本估计器为决策树分类器base_model,并设置当前遍历到的估计器个数。
      • 使用训练集X_trainy_train训练Bagging分类器。
      • 使用训练好的Bagging分类器对测试集X_test进行预测,并计算其在测试集上的准确率。
      • 将该准确率添加到列表y中。
    • 使用matplotlib绘制估计器个数与Bagging分类器测试准确率的关系图,并显示。

总结:这个流程首先加载并处理了葡萄酒数据集,然后训练了一个简单的决策树分类器和一个基于该决策树的Bagging分类器,并测试了不同估计器个数对Bagging分类器性能的影响。

2.代码:

import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt

wine = load_wine()#使用葡萄酒数据集
print(f"所有特征:{wine.feature_names}")
X = pd.DataFrame(wine.data, columns=wine.feature_names)
y = pd.Series(wine.target)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1) #训练集0.8,测试集0.2
#构建并训练决策树分类器,这里特征选择标准使用基尼指数,树的最大深度为1
base_model = DecisionTreeClassifier(max_depth=1, criterion='gini',random_state=1).fit(X_train, y_train)
y_pred = base_model.predict(X_test)#对训练集进行预测
print(f"决策树的准确率:{accuracy_score(y_test,y_pred):.3f}")

## bagging
from sklearn.ensemble import BaggingClassifier
# 建立AdaBoost分类器,每个基本分类模型为前面训练的决策树模型,最大的弱学习器的个数为50
model = BaggingClassifier(estimator=base_model,
                            n_estimators=50,
                            random_state=1)
model.fit(X_train, y_train)# 训练
y_pred = model.predict(X_test)# 预测
print(f"BaggingClassifier的准确率:{accuracy_score(y_test,y_pred):.3f}")


# 测试估计器个数的影响
x = list(range(2, 102, 2))  # 估计器个数即n_estimators,在这里我们取[2,102]的偶数
y = []

for i in x:
    model = BaggingClassifier(estimator=base_model,
                              n_estimators=i,

                              random_state=1)

    model.fit(X_train, y_train)
    model_test_sc = accuracy_score(y_test, model.predict(X_test))
    y.append(model_test_sc)

plt.style.use('ggplot')
plt.title("Effect of n_estimators", pad=20)
plt.xlabel("Number of base estimators")
plt.ylabel("Test accuracy of BaggingClassifier")
plt.plot(x, y)
plt.show()

3.结果:

五、随机森林

1.算法执行流程:

算法执行流程简述如下:

  1. 数据加载与预处理
    • 使用sklearn.datasetsload_wine()函数加载葡萄酒数据集。
    • 打印出数据集中所有特征的名字(wine.feature_names)。
    • 将数据集的特征部分(wine.data)转换为pandasDataFrame对象X,并设置特征名字。
    • 将数据集的标签部分(wine.target)转换为pandasSeries对象y
  2. 数据分割
    • 使用train_test_split函数将数据集Xy分割为训练集(80%)和测试集(20%)。
  3. 构建并训练决策树分类器
    • 初始化一个决策树分类器base_model,设置最大深度为1,特征选择标准为基尼指数,并指定随机状态。
    • 使用训练集X_trainy_train训练决策树分类器。
    • 注意:此处有一个小错误,你实际上是对训练集进行了预测,但通常我们会对测试集进行预测来评估模型性能。不过,你已经打印出了这个“对训练集进行预测”的准确率,尽管这不是常见的做法。
    • 打印决策树分类器在测试集上的准确率(尽管基于上述代码,实际上是对训练集的预测)。
  4. 构建并训练随机森林分类器
    • 初始化一个随机森林分类器model,设置弱学习器(即决策树)的个数为50,并指定随机状态。
    • 使用训练集X_trainy_train训练随机森林分类器。
    • 使用训练好的随机森林分类器对测试集X_test进行预测,得到预测结果y_pred
    • 打印随机森林分类器在测试集上的准确率。
  5. 测试估计器个数对随机森林分类器的影响
    • 创建一个列表x,包含从2到102的偶数,表示要测试的估计器(即决策树)的个数。
    • 创建一个空列表y,用于存储每个估计器个数对应的随机森林分类器在测试集上的准确率。
    • 遍历列表x中的每个估计器个数:
      • 初始化一个新的随机森林分类器,并设置当前遍历到的估计器个数。
      • 使用训练集X_trainy_train训练随机森林分类器。
      • 使用训练好的随机森林分类器对测试集X_test进行预测,并计算其在测试集上的准确率。
      • 将该准确率添加到列表y中。
    • 使用matplotlib绘制估计器个数与随机森林分类器测试准确率的关系图,并显示。

总结:这个流程首先加载并处理了葡萄酒数据集,然后训练了一个简单的决策树分类器(尽管没有正确评估其在测试集上的性能),接着训练了一个随机森林分类器,并测试了不同估计器个数对随机森林分类器性能的影响。

2.代码:

import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt

wine = load_wine()
print(f"所有特征:{wine.feature_names}")
X = pd.DataFrame(wine.data, columns=wine.feature_names)
y = pd.Series(wine.target)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.200, random_state=1)
base_model = DecisionTreeClassifier(max_depth=1, criterion='gini', random_state=1).fit(X_train, y_train)
y_pred = base_model.predict(X_test)
print(f"决策树的准确率:{accuracy_score(y_test, y_pred):.3f}")
#随机森林
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=50, random_state=1)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"RandomForestClassifier的准确率:{accuracy_score(y_test, y_pred):3f}")
x = list(range(2, 102, 2))
y = []

for i in x:
    model = RandomForestClassifier(n_estimators=i, random_state=1)
    model.fit(X_train, y_train)
    model_test_sc = accuracy_score(y_test, model.predict(X_test))
    y.append(model_test_sc)
plt.style.use('ggplot')
plt.title('Effect of n_estimators', pad = 20)
plt.xlabel('Number of base estimators')
plt.ylabel('Test accuracy of RandomForestClassifier')
plt.plot(x, y)
plt.show()

3.结果:

六、k_means

1.算法执行流程:

算法执行流程可以简述如下:

  1. 数据准备
    • 使用 numpy.random.rand(100, 2) 生成一个包含100个样本点、每个样本点有两个特征的数据集 X
    • 使用 matplotlib.pyplot.scatter 绘制这些样本点在一个二维平面上。
  2. 初始化质心
    • 定义一个函数 InitCentroids(X, k),用于从数据集 X 中随机选择 k 个样本点作为初始质心。
    • 在这个例子中,虽然代码示例中包含了 InitCentroids 函数的定义,但在后面的代码中并没有实际调用它,因为 KMeans 类内部已经实现了质心的初始化。
  3. 执行KMeans聚类
    • 创建一个 KMeans 对象,并设置 n_clusters=2,意味着要将数据分为两类。
    • 调用 fit(X) 方法对数据集 X 进行聚类。在 fit 方法内部,KMeans 算法会执行以下步骤:
      • 初始化质心(如果未提供初始质心,则KMeans类内部会随机选择)。
      • 执行迭代过程,直到质心不再显著变化或达到最大迭代次数:
        • 将每个样本点分配给最近的质心。
        • 对于每个簇,计算其所有样本点的均值,并将该均值设置为新的质心。
    • 聚类完成后,KMeans 对象会存储质心的位置、每个样本点的簇标签等信息。
  4. 绘制聚类结果
    • 使用 KMeans 对象的 labels_ 属性获取每个样本点的簇标签。
    • 使用 matplotlib.pyplot.scatter 绘制聚类后的样本点,并使用不同的颜色表示不同的簇。
    • 调用 plt.show() 显示图形。
  5. 结果展示
    • 用户可以看到一个二维散点图,其中不同颜色的点表示不同的簇,每个簇的质心可以用一个特殊的标记(如“x”)表示(虽然在这个代码示例中没有明确绘制质心)。

注意:虽然代码中包含了 InitCentroids 函数的定义,但在实际的 KMeans 聚类过程中并没有使用它,因为 KMeans 类内部已经实现了质心的初始化和更新过程。如果你想要自定义质心的初始化方式,可以通过设置 KMeans 类的 init 参数来实现(例如,init='k-means++' 或 init=InitCentroids,但后者需要稍作修改以适应 KMeans 类的要求)。

2.代码:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import KMeans

x = np.random.rand(100, 2)
plt.scatter(x[:,0], x[:,1], marker='o')

def InitCentroids(x, k):
    index = np.random.randint(0, len(x)-1, k)
    return x[index]

kmeans = KMeans(n_clusters=2).fit(x)
label_pred = kmeans.labels_
plt.scatter(x[:,0], x[:,1], c=label_pred)
plt.show()

3.结果:

七、MLP

1.算法执行流程:

算法执行流程简述如下:

  1. 导入必要的库和模块
    • 导入sklearn.neural_network中的MLPClassifier,用于构建多层感知机(MLP)分类器。
    • 导入sklearn.datasets中的fetch_openml函数,用于从OpenML数据集中获取MNIST数据集。
    • 导入NumPy库,用于数据操作。
  2. 加载MNIST数据集
    • 使用fetch_openml函数从OpenML加载MNIST数据集,指定数据集名称为'mnist_784'并设置解析器为'auto'。
    • 将加载的数据集分为特征(X)和目标变量(y)。
  3. 划分训练集和测试集
    • 将原始数据集Xy的前60,000个样本作为训练集(X_trainy_train)。
    • 将剩余的样本作为测试集(X_testy_test)。
    • 将这些数据转换为NumPy数组,并指定特征数据的数据类型为浮点数(float),目标变量的数据类型为整数(int)。
  4. 创建MLP分类器实例
    • 使用MLPClassifier类创建一个MLP分类器实例clf
    • 设置分类器的参数,包括正则化项alpha(防止过拟合),隐藏层的大小hidden_layer_sizes(指定了神经网络的架构),以及随机种子random_state(确保结果的可复现性)。
  5. 训练模型
    • 调用clf.fit方法,传入训练集的特征X_train和目标变量y_train,开始训练MLP分类器。
    • 在训练过程中,MLP分类器会学习如何根据输入特征(手写数字的图像)预测输出目标(数字的分类)。
  6. 评估模型
    • 调用clf.score方法,传入测试集的特征X_test和目标变量y_test,对模型进行评估。
    • score方法会返回模型在测试集上的准确率,即模型正确分类的样本比例。
  7. 打印测试结果
    • 使用print函数将测试准确率输出到控制台。

通过这个过程,你可以了解到使用多层感知机(MLP)分类器来训练MNIST数据集的基本流程,包括数据加载、预处理、模型构建、训练和评估等步骤。

2.代码:

#使用多层感知机(MLP)分类器来训练MNIST数据集
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import fetch_openml
import numpy as np

mnist = fetch_openml('mnist_784', parser='auto')
X, y = mnist['data'], mnist['target']
X_train = np.array(X[:60000], dtype=float)
y_train = np.array(y[:60000], dtype=int)
X_test = np.array(X[60000:], dtype=float)
y_test = np.array(y[60000:], dtype=int)


clf = MLPClassifier(alpha=1e-5,
                    hidden_layer_sizes=(15,15), random_state=1)

clf.fit(X_train, y_train)


score = clf.score(X_test, y_test)

print(f"Test accuracy: {score}")

3.结果:

八、knn

1.算法执行流程:

算法执行流程简述如下:

  1. 导入必要的库和模块
    • 导入sklearn.datasets中的load_digits函数,用于加载手写数字数据集。
    • 导入sklearn.model_selection中的train_test_split函数,用于分割数据集为训练集和测试集。
    • 导入sklearn.neighbors中的KNeighborsClassifier类,用于创建K近邻(KNN)分类器。
    • 导入sklearn.metrics中的accuracy_score函数,用于评估模型的准确度。
  2. 加载数据集
    • 使用load_digits函数加载手写数字数据集。
    • 从加载的数据集中提取特征集(data)和目标集(target)。
  3. 分割数据集
    • 使用train_test_split函数将数据集分割为训练集和测试集。
    • 设置测试集大小为25%,剩余75%作为训练集。
    • 设置随机种子random_state=33以确保结果的可复现性。
  4. 创建KNN分类器
    • 实例化KNeighborsClassifier类,创建KNN分类器对象knn
    • 由于没有指定任何参数,分类器将使用默认参数(例如,n_neighbors=5,即使用最近的5个邻居进行预测)。
  5. 拟合模型
    • 使用fit方法,传入训练集的特征train_x和目标train_y,让KNN分类器学习训练集中的样本特征和目标之间的映射关系。
  6. 预测数据
    • 使用predict方法,传入测试集的特征test_x,让KNN分类器对测试集中的样本进行预测,并返回预测的目标值predict_y
  7. 评估模型
    • 使用accuracy_score函数,传入测试集的真实目标值test_y和KNN分类器的预测目标值predict_y,计算模型的准确度。
    • 准确度是模型正确预测样本的比例,用于评估模型的性能。
  8. 输出结果
    • 打印出模型的准确度score

整个流程涵盖了从数据加载、预处理、模型构建、训练、预测到评估的完整步骤,是机器学习中的一个标准流程。

2.代码:

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
digits = load_digits()
data = digits.data
target = digits.target
train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.25, random_state=33)
knn = KNeighborsClassifier()
knn.fit(train_x, train_y)
predict_y = knn.predict(test_x)
score = accuracy_score(test_y, predict_y)
print(score)

3.结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git】Git 的初识和安装

一、提出问题 不知道你工作或学习时,有没有遇到这样的情况:在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,比如: 设计文档v1设计文…

Python字符串操作详解(超详细)

Python字符串操作详解 目录 Python字符串操作详解一. 字符串创建二. 字符串拼接1. 使用 运算符2. 使用 .join() 方法 三. 字符串索引和切片1. 字符串索引2. 字符串切片3. 字符串长度和负索引4. 字符串不可变性 四. 字符串长度五. 字符串转换六. 查找子字符串七. 字符串替换八.…

xml创建模型组合体

XML创建模型组合体 创建步骤模型准备模型处理模型文件XML编写 效果 创建步骤 模型准备 CAD 提供的原始模型如下: 该模型存在的问题: 单位问题:CAD出图的是 mm 为单位,但是 mujoco 建模这边用的是以 m 为单位的;原点…

二刷算法训练营Day22 | 二叉树(8/9)

目录 详细布置: 1. 235. 二叉搜索树的最近公共祖先 2. 701. 二叉搜索树中的插入操作 3. 450. 删除二叉搜索树中的节点 详细布置: 1. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共…

onenet踩坑连接mqtt

一定注意这个version为默认 完整说明https://open.iot.10086.cn/doc/v5/fuse/detail/922 注意这里的的device是名称,不是id,最好产品开发那里就是都是一个名字

华安保险:核心系统分布式升级,提升保费规模处理能力2-3倍 | OceanBase企业案例

在3月20日的2024 OceanBase数据库城市行的活动中,安保险信息科技部总经理王在平发表了以“保险行业核心业务系统分布式架构实践”为主题的演讲。本文为该演讲的精彩回顾。 早在2019年,华安保险便开始与OceanBase接触,并着手进行数据库的升级…

spring boot3登录开发-2(3邮件验证码接口实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 上文衔接 接口设计与实现 1.接口分析 2.实现思路 3.代码实现 1.定义验证码短信HTML模板枚举类 2.定义验证码业务接口 3. 验证码业务接口实现 4.控制层代码 4.测试 写…

三、Mapper XML的解析和注册使用

流程: 1.Resources加载MyBatis配置文件生成Reader字符流 2.SqlSessionFactoryBuilder开始引导构建SqlSessionFactory,包括两步: 第一步是在XMLConfigBuilder中使用dom4j解析xml文件,将解析的SQL包装成MappedStatement对象存入Con…

微信小程序-案例:本地生活-首页(不使用网络数据请求)

一、 1.页面效果: 二、 1.新建项目并添加页面 在app.json文件中: "pages": ["pages/home/home","pages/message/message","pages/contact/contact"] 2.配置导航栏效果 在app.json文件中: &quo…

Windows11系统 和Android 调试桥(Android Debug Bridge,ADB)工具安装,app抓取日志内容

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Android调试桥(ADB)是一种多功能命令行工具,它允许开发者与连接到计算机上的Android设备进行通信和控制。ADB工具的作用包括但不限于: 安装和卸载应用程序&…

Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解

前言 在Web开发中,Three.js是一个极为强大的库,它让开发者能够轻松地在浏览器中创建和展示3D图形。随着3D技术在网页设计、游戏开发、数据可视化等领域的广泛应用,用户与3D场景的交互变得日益重要。而要实现这种交互,一个核心的技…

初识C++ · 反向迭代器简介

目录 前言 反向迭代器的实现 前言 继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。…

点击重置按钮清除el-table排序状态的高亮样式

需求&#xff1a;需要点击按钮的时候&#xff0c;清除掉el-table排序状态的高亮样式 解决方法&#xff1a;table添加ref"tableData",然后使用this.$refs.tableData.clearSort()。 <el-table:data"tableData"style"width: 100%":header-cell-s…

PHP实现抖音小程序用户登录获取openid

目录 第一步、抖音小程序前端使用tt.login获取code 第二步、前端拿到code传给后端 第三步、方法1 后端获取用户信息 第四步、方法2 抖音小程序拿到用户信息把用户信息传给后端 code2Session抖音小程序用户登录后端文档 第一步、抖音小程序前端使用tt.login获取code 前端 …

如何解决chatgpt出现503 bad gateway的问题

昨日&#xff0c;ChatGPT官网挂了&#xff0c;也就是使用web网页端访问的用户&#xff0c;会出现 bad gateway 情况。我们去ChatGPT官方的监控查看&#xff0c;已经展示相关错误。 影响的范围有&#xff1a; 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…

Ubuntu22.04之解决:emacs无法输入中文问题(二百四十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

js 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。

选择一个音频文件&#xff0c;绘制波形&#xff0c;从右向左逐渐前进。 完整代码&#xff1a; <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…

实战:Zig 编写高性能 Web 服务(2)

1.1 编写 HTTP server 我们从python -m http.server 8000启动得到灵感&#xff0c;先确定好目标&#xff1a; 编写一个HTTP/1.1 http serverzig version 0.12.0 使用zig init搭建项目的前置工作你先自行搭建好&#xff0c;不会的翻看前面铺垫的章节熟悉zig的项目结构。 关键…

大型语言模型智能体(LLM Agent)在实际使用的五大问题

在这篇文章中&#xff0c;我将讨论人们在将代理系统投入生产过程中经常遇到的五个主要问题。我将尽量保持框架中立&#xff0c;尽管某些问题在特定框架中更加常见。 1. 可靠性问题 可靠性是所有代理系统面临的最大问题。很多公司对代理系统的复杂任务持谨慎态度&#xff0c;因…

从入门到精通:Java三目运算符详细教程!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…