Python使用input函数交互代码运行

在运行Python程序时,有时需要对运行结果进行解读后提供新的参数和命令以继续执行该程序。因此,我之前一直采取的策略是使用Jupyter的交互编译界面,将结果输出后,再次写几行关键代码运行。

 

典型的例子是,当我们使用Kmeans聚类对数据划分时,首先需要确定划分的簇数,典型方法是判断SSE曲线拐点的手肘法等。因此,在代码中可以设定不同的簇数,记录聚类划分的SSE绘制成图。成图后,判断拐点以确定最终的聚类数量。那么这时需要重新人工设置聚类数这一参数,修改代码后重新运行。

 

而一个(貌似看起来)更加聪明智能的办法是,使用 input 函数获取你的参数,获取后代码自己继续执行下去(而无需重新开始)。本质上这一方法只是减少了代码运行后的人工调参成本,但在运行前你需要调试好 input 后的执行程序。

 

这里提供一个例子,代码如下。

				
					# 假设我们需要根据SSE使用手肘法确定聚类数
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 这里获取数据data

# KMeans
sse = []
s_scores = []        
for n in range(2, 11):
    cluster = KMeans(n_clusters=n, random_state=42).fit(data)
    y_pred = cluster.labels_
    si_avg = silhouette_score(X_pca, y_pred)
    sse.append(cluster.inertia_)  # inertia_ 属性即为 SSE
    s_scores.append(si_avg)  # 轮廓系数
    
# plot
fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].plot(range(2, 11), sse, marker="o")
ax[1].plot(range(2, 11), s_scores, marker="o")
ax[0].set_xticks(range(2, 11))
plt.show()

# 此时会显示不同聚类数的两个指标图示
# 根据SSE拐点以及轮廓系数最大确定聚类数

# 使用input函数获取你的指令
while True:
    n_clusters_input = int(input("请输入聚类数量以继续:"))
    if n_clusters_input in range(2, 11):
        print(f"选择 {n_clusters_input} 聚类数继续")
        break
    else:
        print("输入错误,请重新输入。")
    
				
			
渝ICP备2024029132
Copyright © 2024 xuzzhan
滚动至顶部