Multi-classificação linear de aprendizado de máquina do conjunto de dados da íris

Primeiro, entenda o conjunto de dados da flor da íris

  • O conjunto de dados de flores de íris é um conjunto de dados multidimensional clássico introduzido por Sir Ronald Fisher em 1936, que pode ser usado como uma amostra para análise discriminante.
  • Este conjunto de dados contém 50 amostras de cada uma das três variedades de flores de íris (Iris setosa, Iris virginica e Iris versicolor), e cada amostra também tem 4 parâmetros característicos (o comprimento e largura das sépalas e o comprimento e largura das pétalas , em centímetros) Unidade)
    Exibir conjunto de dados
    Insira a descrição da imagem aqui
    Descrição da categoria
    Insira a descrição da imagem aqui

二 、 LogisticRegression

  1. A
    Regressão Logística (Logística Regressão ) explica que a Regressão Logística é usada para tratar o problema de regressão da variável dependente como uma variável categórica. O comum é o problema de distribuição binária ou binomial, e também pode tratar o problema de multiclassificação é na verdade uma espécie de Classificação.

  2. Uso do modelo de regressão LogisticRegression no modelo Sklearn①
    Import

    from sklearn.linear_model import LogisticRegression  #导入逻辑回归模型 
    

    O treinamento ②fit ()
    chama o método fit (x, y) para treinar o modelo, onde x é o atributo dos dados ey é o tipo

    clf = LogisticRegression()
    print(clf)
    clf.fit(train_feature,label)
    

    ③predict () prediction
    Use o modelo treinado para prever o conjunto de dados e retornar o resultado da previsão

    predict['label'] = clf.predict(predict_feature)
    
  3. Descrição do parâmetro do modelo de regressão LogisticRegression

    LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
              intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
              penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
              verbose=0, warm_start=False)
    

    ①Parâmetro de seleção de regularização (penalidade) Os
    valores selecionáveis ​​do parâmetro de penalidade são "l1" e "l2", que correspondem à regularização L1 e regularização L2, respectivamente. O default é a regularização L2 . Ao ajustar os parâmetros, se nosso objetivo principal é resolver o sobreajuste , geralmente a regularização de L2 de penalidade é suficiente. Mas se você escolher a regularização L2 e descobrir que ela ainda está sobreajustada, ou seja, quando o efeito da previsão é pobre, você pode considerar a regularização L1. Quando o modelo tem muitos recursos, espera-se que alguns coeficientes de recursos sem importância sejam zerados para tornar os coeficientes do modelo esparsos e a regularização L1 pode ser usada.
    ② Parâmetro de seleção do algoritmo de otimização (solver) O
    parâmetro solver determina nosso método de otimização para a função de perda de regressão logística. Existem 4 algoritmos para escolher: liblinear, lbfgs, newton-cg, sag
    说明:

    A escolha do solucionador de parâmetro
    Quando a penalidade é a regularização L2, o algoritmo opcional {'newton-cg', 'lbfgs', 'liblinear', 'sag'}. Quando a penalidade é a regularização L1, você só pode escolher 'liblinear'.
    Isso ocorre porque a função de perda de regularização L1 não é contínua e diferenciável, e os três algoritmos de otimização {'newton-cg', 'lbfgs', 'sag'} requerem todos a primeira ou segunda derivada contínua da função de perda.

    ③Parâmetro de seleção do método de classificação (multi_class) O
    parâmetro multi_class determina nossa escolha do método de classificação. Existem dois valores para escolher, ovr e multinomial . O padrão é ovr . A diferença entre os dois está principalmente na regressão logística múltipla.
    说明:

    Se ovr for selecionado, os quatro métodos de otimização da função de perda liblinear, newton-cg, lbfgs e sag podem ser selecionados. Mas se você escolher multinomial, poderá escolher apenas newton-cg, lbfgs e sag.

    ④Parâmetro tipo peso (class_weight) O
    parâmetro class_weight é utilizado para indicar os pesos dos vários tipos no modelo de classificação, não precisa ser inserido, ou seja, os pesos não são considerados, ou os pesos de todos os tipos são iguais. Se você escolher inserir, pode escolher equilibrado para permitir que a biblioteca de classes calcule os pesos de tipo, ou podemos inserir os pesos de cada tipo nós mesmos. Por exemplo, para um modelo binário de 0,1, podemos definir class_weight = {0 : 0.9, 1: 0.1}, Desta forma, o peso do tipo 0 é 90% e o peso do tipo 1 é 10%. Se o class_weight for balanceado, a biblioteca de classes calculará o peso com base no tamanho da amostra de treinamento. Quanto maior for o tamanho da amostra de um determinado tipo, menor será o peso e, quanto menor for o tamanho da amostra, maior será o peso.
    ⑤ O parâmetro de peso da amostra (sample_weight)
    não é uma estimativa imparcial da amostra geral devido ao desequilíbrio da amostra, o que pode levar a um declínio na capacidade preditiva de nosso modelo. Você pode tentar resolver este problema ajustando o peso da amostra.
    O método de ajuste do peso da amostra: O
    primeiro é usar balanceado em class_weight.
    O segundo método é ajustar o peso de cada amostra por sample_weight ao chamar a função de ajuste.
    说明:

    Se os dois métodos acima forem usados, o peso real da amostra será class_weight * sample_weight.

Três, realize a multi-classificação linear

(1) Pegue o comprimento e a largura das sépalas como feições para classificar

  1. Importar pacotes relacionados
    #导入相关包
    import numpy as np
    from sklearn.linear_model import LogisticRegression
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    from sklearn import datasets
    from sklearn import preprocessing
    import pandas as pd
    from sklearn.preprocessing import StandardScaler
    from sklearn.pipeline import Pipeline
    
  2. Obtenha o conjunto de dados
    # 获取所需数据集
    iris=datasets.load_iris()
    #每行的数据,一共四列,每一列映射为feature_names中对应的值
    X=iris.data
    print(X)
    #每行数据对应的分类结果值(也就是每行数据的label值),取值为[0,1,2]
    Y=iris.target
    print(Y)
    
  3. Processe os dados
    #归一化处理
    X = StandardScaler().fit_transform(X)
    print(X)
    
  4. Modelo de treinamento
    lr = LogisticRegression()   # Logistic回归模型
    lr.fit(X, Y)        # 根据数据[x,y],计算回归参数
    
  5. Desenhe a imagem classificada
    N, M = 500, 500     # 横纵各采样多少个值
    x1_min, x1_max = X[:, 0].min(), X[:, 0].max()   # 第0列的范围
    x2_min, x2_max = X[:, 1].min(), X[:, 1].max()   # 第1列的范围
    t1 = np.linspace(x1_min, x1_max, N)
    t2 = np.linspace(x2_min, x2_max, M)
    x1, x2 = np.meshgrid(t1, t2)                    # 生成网格采样点
    x_test = np.stack((x1.flat, x2.flat), axis=1)   # 测试点
    
    cm_light = mpl.colors.ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
    cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
    y_hat = lr.predict(x_test)       # 预测值
    y_hat = y_hat.reshape(x1.shape)                 # 使之与输入的形状相同
    plt.pcolormesh(x1, x2, y_hat, cmap=cm_light)     # 预测值的显示
    plt.scatter(X[:, 0], X[:, 1], c=Y.ravel(), edgecolors='k', s=50, cmap=cm_dark)    
    plt.xlabel('petal length')
    plt.ylabel('petal width')
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)
    plt.grid()
    plt.show()
    
    Resultado do sorteio
    Insira a descrição da imagem aqui
  6. Modelo preditivo
    y_hat = lr.predict(X)
    Y = Y.reshape(-1)
    result = y_hat == Y
    print(y_hat)
    print(result)
    acc = np.mean(result)
    print('准确度: %.2f%%' % (100 * acc))
    
    resultado da previsão
    Insira a descrição da imagem aqui

(2) Pegue o comprimento e a largura das pétalas como características para classificar

O método é o mesmo acima, principalmente para processamento de dados, pegue os próximos dois valores próprios

X=X[:,2:]

Resultados de plotagem Resultados de
Insira a descrição da imagem aqui
previsão
Insira a descrição da imagem aqui
Claro, você pode combinar os quatro valores de recursos (processar os dados) e, em seguida, classificá-los da maneira acima.

Quatro, resumo

Através da realização da multi-classificação linear, entendemos principalmente o processo de uso da regressão logística. Seu processo de uso inclui principalmente três processos, a saber, importar todo o pacote do modelo, treinar o modelo e prever os resultados. A julgar pelos resultados finais da previsão, a precisão de todo o modelo ainda é relativamente alta e pode atender aos requisitos. A partir da comparação dos dois resultados, o resultado da classificação das pétalas será mais preciso do que o resultado da classificação das sépalas.

Cinco, link de referência

Regressão Logística

Acho que você gosta

Origin blog.csdn.net/qq_43279579/article/details/115120795
Recomendado
Clasificación