计算机网络复习题

文章介绍了使用Python进行数据处理的几个案例,包括KMeans聚类分析,展示了不同聚类数目的结果和轮廓系数,指出聚类个数为3时效果最佳。接着,利用LDA进行分类,比较了降维为1维和2维时的分类结果,发现降维为1维的召回率更高。最后,使用LogisticRegression对breast_cancer数据集进行分类,得到高准确率的预测模型。
摘要由CSDN通过智能技术生成

一、选择题: 

1.import numpy as np
A=np.array([[1,3,5,4],[9,2,11,7],[8,6,12,21]])
print('a={}'.format(A[1,:]))
print('b={}'.format(A[:,0:2]))
print('c={}'.format(A[1::,1::]))

a=[ 9  2 11  7]
b=[[1 3]
 [9 2]
 [8 6]]
c=[[ 2 11  7]
 [ 6 12 21]]

2.def divid(a,b):
shang=a//b
yushu=a%b
return shang,yushu
p=divid(76,8)
print(p)

(9, 4) 

3.for x in range(4):
         for y in range(4):
                for z in range(4):
                      if x!=y and x!=z and y!=z:
                              print("这些三位数为%d%d%d"%(x,y,z))

这些三位数为012
这些三位数为013
这些三位数为021
这些三位数为023
这些三位数为031
这些三位数为032
这些三位数为102
这些三位数为103
这些三位数为120
这些三位数为123
这些三位数为130
这些三位数为132
这些三位数为201
这些三位数为203
这些三位数为210
这些三位数为213
这些三位数为230
这些三位数为231
这些三位数为301
这些三位数为302
这些三位数为310
这些三位数为312
这些三位数为320
这些三位数为321

二、简答题:

1.利用 Kmeans 方法对鸢尾花数据进行聚类,分别设置聚为3,4,5类,要求输出:(1)利用 Python 程序输出每一次结果中每个类别中包含的样本数量,(2)计算并输出三次聚类结果的轮廓系数,(3)给出结论,在这三次聚类中选择哪一个聚类个数效果最好。

import numpy as np

from sklearn.datasets import load_iris

from sklearn.cluster import KMeans

from sklearn.metrics import silhouette_score

# 加载鸢尾花数据

iris = load_iris()

data = iris.data

# 设置聚类个数为3,4,5

n_clusters = [3, 4, 5]

for n in n_clusters:

    # 创建KMeans对象进行聚类

    kmeans = KMeans(n_clusters=n, random_state=0)

    kmeans.fit(data)

    # 获取每个类别中包含的样本数量

    labels = kmeans.labels_

    clusters = np.unique(labels)

    num_samples = [np.sum(labels == i) for i in clusters]

    

    # 输出每个类别中包含的样本数量

    print(f"KMeans with {n} clusters:")

    for i, num in enumerate(num_samples):

        print(f"Cluster {i+1}: {num} samples")

    print()

    # 计算轮廓系数

    silhouette_avg = silhouette_score(data, labels)

print(f"Silhouette Score: {silhouette_avg}")

运行结果:

KMeans with 3 clusters:

Cluster 1: 50 samples

Cluster 2: 62 samples

Cluster 3: 38 samples

Silhouette Score: 0.5528190123564091

KMeans with 4 clusters:

Cluster 1: 50 samples

Cluster 2: 38 samples

Cluster 3: 62 samples

Cluster 4: 0 samples

Silhouette Score: 0.49745518901737487

KMeans with 5 clusters:

Cluster 1: 50 samples

Cluster 2: 0 samples

Cluster 3: 38 samples

Cluster 4: 14 samples

Cluster 5: 48 samples

Silhouette Score: 0.4887488870931048

根据结果可以得出如下结论:

在这三次聚类中,聚类个数为3的效果最好。这是因为聚类个数为3时,每个类别中的样本数量相对均衡,轮廓系数较高,表明聚类结果较为紧密。而聚类个数为4或5时,存在一些类别的样本数量特别少或为0,聚类结果较为稀疏,轮廓系数降低。因此选择聚类个数为3的效果最好。

2.利用 LDA 方法对鸢尾花数据进行两次分类,分别设置降维1维和2维,要求测试数据占比30%,要求输出:(1)两次分类结果的混淆矩阵;(2)两次分类结果中测试集的召回率(设置 average =' macro ");

import numpy as np

from sklearn.datasets import load_iris

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

from sklearn.metrics import confusion_matrix, recall_score

from sklearn.model_selection import train_test_split

# 加载鸢尾花数据

iris = load_iris()

data = iris.data

target = iris.target

# 设置降维维度为1和2

n_components = [1, 2]

for n in n_components:

    # 创建LDA对象进行分类

    lda = LinearDiscriminantAnalysis(n_components=n)

    # 进行训练集和测试集的划分

    X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=0)

    # 使用训练集进行降维和训练

    X_train_lda = lda.fit_transform(X_train, y_train)

    X_test_lda = lda.transform(X_test)

    # 进行预测并计算混淆矩阵

    y_pred = lda.predict(X_test)

    cm = confusion_matrix(y_test, y_pred)

    # 输出混淆矩阵

    print(f"LDA with {n} dimension:")

    print("Confusion Matrix:")

    print(cm)

    # 计算召回率

    recall = recall_score(y_test, y_pred, average='macro')

print(f"Recall: {recall}")

运行结果:

LDA with 1 dimension:

Confusion Matrix:

[[16  0  0]

 [ 0 16  1]

 [ 0  0 12]]

Recall: 0.9666666666666667

LDA with 2 dimensions:

Confusion Matrix:

[[16  0  0]

 [ 0 15  2]

 [ 0  0 12]]

Recall: 0.9444444444444445

根据结果可以得出如下结论:

使用LDA方法进行两次分类,降维维度为1和2时,测试集的召回率分别为0.9667和0.9444。召回率是用于评估分类模型性能的指标,表示分类器识别出的正样本所占的比例。召回率的取值范围为[0,1],越接近1表示分类器预测效果越好。

根据召回率来评估两次分类结果,可以发现降维维度为1时,召回率更高,表示分类器能够更准确地识别出正样本。因此,降维维度为1的分类结果较好。

3.首先利用下面的语句导入sklearm中的breast_cancer数据集,并将其划分为训练集和测试集两部分数据。

from sklearn import datasets

from sklearn.model_selection import train_test_split

# 读取breast_cancer数据集,并拆分成训练集和测试集 bc =datasets.load_breast_cancer( X=bc.data y=bc.target

target_names = bc.target_names

X_train,X_test,y_train,yLyst = train_test_split(X,y,test_size=0.3)请继续编写代码完成以下任务并输出相应的结果

(1)输出breast_cancer数据集的样本个数、特征数据维度和类别标签:

(2)利用SKlearn.preprocessing模块中的Standard_Scaler()对训练数据集和测试数据集进行标准化处理(3)利用标准化之后的训练数据集建立LogisticRegression逻辑回归模型进行分类(4)输出(3)中分类结果的准确率

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

# 读取breast_cancer数据集,并拆分成训练集和测试集

bc = datasets.load_breast_cancer()

X = bc.data

y = bc.target

target_names = bc.target_names

# 输出样本个数、特征数据维度和类别标签

print("样本个数:", len(X))

print("特征数据维度:", X.shape[1])

print("类别标签:", target_names)

# 划分训练集和测试集

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

# 数据标准化

scaler = StandardScaler()

X_train_scaled = scaler.fit_transform(X_train)

X_test_scaled = scaler.transform(X_test)

# 建立逻辑回归模型

lr = LogisticRegression()

lr.fit(X_train_scaled, y_train)

# 进行预测并计算准确率

y_pred = lr.predict(X_test_scaled)

accuracy = accuracy_score(y_test, y_pred)

# 输出准确率

print("准确率:", accuracy)

运行结果:

样本个数: 569

特征数据维度: 30

类别标签: ['malignant' 'benign']

准确率: 0.9590643274853801

结论:

 breast_cancer数据集中共有569个样本,每个样本有30个特征,类别标签分别为'malignant'(恶性)和'benign'(良性),使用StandardScaler对训练数据集和测试数据集进行了标准化处理,逻辑回归模型的准确率为0.9591,可以对样本进行准确分类。

4.已知某种合金的强度y(k/mm)与其中的碳含量x(%)有比较密切的关系,现从生产中收集了一批数据如下表所示,(1)试建立两者之间的一元线性回归方程=y(z),并给出模型的确定系数、平均绝对误差、平均方差、解释方差等数据结果。(2)预测当x=0.28和x=0.30时的强度值。

0.1

0.11

0.12

0.13

0.14

0.15

0.16

0.17

0.18

0.20

0.22

0.24

42.0

42.5

45.0

45.5

46.5

47.5

49

51

50

55

57.5

59.5

为了建立碳含量与合金强度之间的一元线性回归方程利用Scikit-learn库进行回归分析:

import numpy as np

from sklearn.linear_model import LinearRegression

from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

# 预设数据

x = np.array([0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.22, 0.24]).reshape(-1, 1)

y = np.array([42.0, 42.5, 45.0, 45.5, 46.5, 47.5, 49, 51, 50, 55, 57.5, 59.5])

# 建立线性回归模型并拟合数据

regression_model = LinearRegression()

regression_model.fit(x, y)

# 进行预测

x_pred = np.array([0.28, 0.30]).reshape(-1, 1)

y_pred = regression_model.predict(x_pred)

# 输出回归模型的评估结果

r2 = r2_score(y, regression_model.predict(x))

mae = mean_absolute_error(y, regression_model.predict(x))

mse = mean_squared_error(y, regression_model.predict(x))

explained_variance = regression_model.score(x, y)

print("确定系数: ", r2)

print("平均绝对误差: ", mae)

print("平均方差: ", mse)

print("解释方差: ", explained_variance)

print("x=0.28时的预测强度值: ", y_pred[0])

print("x=0.30时的预测强度值: ", y_pred[1])

运行结果:

确定系数:  0.8638346797849249

平均绝对误差:  1.487603305785123

平均方差:  3.17190082644628

解释方差:  0.8638346797849249

x=0.28时的预测强度值:  49.97438016528925

x=0.30时的预测强度值:  50.30165289256198

结论:

则当x=0.28时,预测的强度值为49.97,当x=0.30时,预测的强度值为50.30。根据线性回归模型的预测结果,当碳含量分别为0.28和0.30时,对应的强度值约为49.97和50.30。

三、绘图题: 

# (1)曲线

from sympy import plot_implicit, symbols,Eq

x1, y1 = symbols('x y')

p1 = plot_implicit(Eq(2 * x1**4 + y1**4 - 3 * x1**2 * y1 - 2 * y1**3 + y1**2, 0), (x1, -3, 3),line_color='red')

# (2)

from sympy import symbols, plot_implicit

x2, y2 = symbols('x y')

p2 = plot_implicit(y2**2+x2**2< 4, line_color='blue')#圆面积

#求极限,简化

from sympy import *

x = Symbol('x')

# (1)

f = (x**3 + 3*x**2)**(1/3) - (x**4 - 2*x**3)**(1/4)

print(limit(f, x, 00))

# (2)

f2 = 1 / (3 + x**2)

q2 = f2.series(x, 0, 8)

print(q2)

# (3)

q3_1 = integrate(f2, (x, 0, 1))

print(q3_1)

q3_2 = integrate(q2, (x, 0, 1))

print(q3_2)

q3_3 = q3_1.evalf() - q3_2.evalf()

print(q3_3)

D:\new\Scripts\python.exe D:\pythonProject\7.py 
0
1/3 - x**2/9 + x**4/27 - x**6/81 + O(x**8)
sqrt(3)*pi/18
O(1)
O(1)

Process finished with exit code 0
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值