采用微软的AutoML框架对鸢尾花进行特征筛选

from sklearn import datasets
from sklearn.model_selection import train_test_split
from nni.feature_engineering.gbdt_selector import GBDTSelector
import torch
iris = datasets.load_iris()
x = iris.data
y = iris.target

params = {
    # default=0.1, type=double, alias=shrinkage_rate
    'learning_rate': 0.2,

    # default=regression,任务类型
    'application': 'binary',
    # 叶子节点的数量
    'num_leaves': 31,
    # default=1, type=int, alias=verbose  |  日志冗长度,[详细信息]代表是否输出 < 0: Fatal, = 0: Error (Warn), > 0: Info
    'verbosity': -1,
     'data_random_seed': 2,
     'bagging_fraction': 0.8,# default=1.0, type=double, 0.0 < bagging_fraction < 1.0, alias=sub_row, subsample
    # 类似于 feature_fraction, 但是它将在不进行重采样的情况下随机选择部分数据
    # 可以用来加速训练
    # 可以用来处理过拟合
    # Note: 为了启用 bagging, bagging_freq 应该设置为非零值

     'feature_fraction': 0.6,
     #default=1.0, type=double, 0.0 < feature_fraction < 1.0, alias=sub_feature,                                                                        #colsample_bytree
    # 如果 feature_fraction 小于 1.0, LightGBM 将会在每次迭代中随机选择部分特征. 例如, 如果设置为 0.8, 将会在每棵树训练之前选择 80% 的特征
    # 可以用来加速训练
    # 可以用来处理过拟合
    'nthread': 4,
    #default=OpenMP_default, type=int, alias=num_thread, nthread
    # LightGBM 的线程数
    # 为了更快的速度, 将此设置为真正的 CPU 内核数, 而不是线程的数量 (大多数 CPU 使用超线程来使每个 CPU 内核生成 2 个线程)
    # 当你的数据集小的时候不要将它设置的过大 (比如, 当数据集有 10,000 行时不要使用 64 线程)
    # 请注意, 任务管理器或任何类似的 CPU 监视工具可能会报告未被充分利用的内核. 这是正常的
    # 对于并行学习, 不应该使用全部的 CPU 内核, 因为这会导致网络性能不佳

    'lambda_l1': 1,         #lambda_l1, default=0, type=double, alias=reg_alpha   L1 正则
    'lambda_l2': 1}


X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)

#X_train = torch.tensor(X_train).float()
#y_train = torch.tensor(y_train).long()

# 初始化 Selector
fgs = GBDTSelector()
# 拟合数据
fgs.fit(X_train, y_train, lgb_params=params, eval_ratio=0.3, early_stopping_rounds=2, importance_type='gain', num_boost_round=10)
# 获取重要的特征
# 此处会返回重要特征的索引。
print(fgs.get_selected_features(2))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要导入鸢尾花数据集并进行预处理: ```python from sklearn.datasets import load_iris import pandas as pd # 导入数据集 iris = load_iris() # 转换为DataFrame格式 data = pd.DataFrame(iris.data, columns=iris.feature_names) # 输出前5行数据 print(data.head()) ``` 接下来,我们可以使用DIANA聚类算法对数据进行聚类。其中,我们需要使用`pyclustering`库中的`diana`模块。 ```python from pyclustering.cluster.diana import diana from pyclustering.utils import read_sample # 将数据集转换为样本列表 samples = read_sample(data.values.tolist()) # 运行DIANA算法 model = diana(samples) # 获取聚类结果 clusters = model.get_clusters() # 获取每个样本所属的簇编号 labels = [0] * len(samples) for i, cluster in enumerate(clusters): for j in cluster: labels[j] = i # 输出聚类结果 print(labels) ``` 现在我们已经得到了聚类结果。接下来,我们可以使用调参来优化聚类效果。DIANA算法主要有两个参数需要调整:阈值和距离度量。其中,阈值控制了簇与簇之间的距离,距离度量用于计算簇之间的距离。 ```python from pyclustering.cluster.diana import diana from pyclustering.utils import read_sample from pyclustering.samples.definitions import SIMPLE_SAMPLES # 将数据集转换为样本列表 samples = read_sample(data.values.tolist()) # 设置阈值和距离度量 threshold = 1.0 metric = 'euclidean' # 创建DIANA算法模型 model = diana(samples, threshold=threshold, metric=metric) # 运行DIANA算法 model.process() # 获取聚类结果 clusters = model.get_clusters() # 获取每个样本所属的簇编号 labels = [0] * len(samples) for i, cluster in enumerate(clusters): for j in cluster: labels[j] = i # 输出聚类结果 print(labels) ``` 在调参时,我们可以通过多次运行DIANA算法来比较不同参数下的聚类效果,并选择效果最好的参数组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值