python—内置函数hasattr()

描述
hasattr() 函数用于判断对象是否包含对应的属性。
语法

hasattr(object, name)

参数

  • object – 对象。
  • name – 字符串,属性名。

如果对象有该属性返回 True,否则返回 False。

案例

import numpy as np
import pandas as pd
import matplotlib as mpl
import warnings
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import label_binarize
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegressionCV
from sklearn.svm import SVC
from itertools import cycle
from sklearn.metrics import roc_curve, roc_auc_score


# 获取数据
def loaddata():
    data = pd.read_csv('data/iris.data', header=None)
    # 将类别数据转换为数值数据
    iris_types = data[4].unique()
    for i, iris_type in enumerate(iris_types):
        data._set_value(data[4] == iris_type, 4, i)
    data = data.values
    X = data[:, :2]
    y = data[:, -1].astype(np.int)
    return X, y


if __name__ == '__main__':
    #  消除警告
    warnings.filterwarnings(action='ignore')
    # 设置样式格式
    # 不用科学计数法,使用小数
    np.set_printoptions(suppress=True)
    # 设置显示宽度
    pd.set_option('display.width', 400)
    # 获取数据
    X, y = loaddata()
    # 获取类别个数
    c = np.unique(y).size
    # 数据分割
    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=0)
    # 标签二值化—one-hot编码
    y_one_hot = label_binarize(y_test, classes=np.arange(c))
    # 逻辑回归C
    alpha = np.logspace(-2, 2, 20)
    # 模型
    models = [
        ['Knn', KNeighborsClassifier(n_neighbors=7)],
        ['lgc', LogisticRegressionCV(Cs=alpha, fit_intercept=False, cv=5)],
        ['SVM(linear)', GridSearchCV(SVC(kernel='linear', decision_function_shape='ovr'), param_grid={'C': alpha})],
        ['SVM(RBF)',
         GridSearchCV(SVC(kernel='rbf', decision_function_shape='ovr'), param_grid={'C': alpha, 'gamma': alpha})]
    ]

    # 颜色迭代器
    colors = cycle('gmcr')
    # 画每个图的ROC曲线
    mpl.rcParams['font.sans-serif'] = ['simHei']
    mpl.rcParams['axes.unicode_minus'] = False
    fig = plt.figure(facecolor='w', figsize=(7, 6))

    for (name, model), color in zip(models, colors):
        model.fit(X_train, y_train)
        if hasattr(model, 'C_'):
            print(model.C_)
        if hasattr(model, 'best_params_'):
            print(model.best_params_)
        if hasattr(model, 'predict_proba'):  # 概率
            y_score = model.predict_proba(X_test)
        else:
            y_score = model.decision_function(X_test)  # 决策函数(GridSearchCV中)

        fpr, tpr, threshold = roc_curve(y_one_hot.ravel(), y_score.ravel())
        auc = roc_auc_score(y_one_hot.ravel(), y_score.ravel())
        plt.plot(fpr, tpr, c=color, lw=2, alpha=0.7, label='%s,AUC=%.3f' % (name, auc))

    plt.plot((0, 1), (1, 0), c='#808080', lw=2, ls='--', alpha=0.7)
	# 设置坐标范围
    plt.xlim((-0.01, 1.02))
    plt.ylim((-0.01, 1.02))
	# 设置坐标精度
    plt.xticks(np.arange(0, 1.1, 0.1))
    plt.yticks(np.arange(0, 1.1, 0.1))
	# 设置坐标标签
    plt.xlabel('FPR', fontsize=13)
    plt.ylabel('TPR', fontsize=13)
    plt.grid(b=True, ls=':')
    # 图例
    plt.legend(loc='lower right', fontsize=12)
    # 标题
    plt.title('鸢尾花数据不同分类器的ROC与AUC', fontsize=17)
    plt.show()
0.904814814814815  # KNeighborsClassifier直接打印auc
[3.35981829 3.35981829 3.35981829]   # LogisticRegressionCV有C_属性
0.8824691358024691   # LogisticRegressionCV打印auc
{'C': 0.18329807108324356}  
0.9276543209876543
{'C': 0.29763514416313175, 'gamma': 0.29763514416313175}
0.9288888888888889
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值