선형 회귀와 특징량의 축소

개시하다


선형 회귀를 실행할 때 어떤 모델이 가장 효율적인지 시도해 보세요.데이터는 scikit-learn의breaast캔서로 이루어지다.이 데이터는 웨이스콘신 유방암 데이터 집합이라고 불리며 종양이 양성인지 악성인지를 판정한다.데이터는 569개로 양성 212개, 악성 357개, 특징량 30개였다.이 데이터를 사용하여 종양이 양성인지 악성인지 판정하는 모델을 만들고 결정 계수가 가장 높은 모델을 선택한다.
지금까지의 경과에 따르면 가장 큰 확정 계수를 가진 모델은 선형 회귀였지만 확정 계수는 0.73에 이르지 못했다.확정 계수를 높이기 위해 공헌률이 높은 특징량을 추출하여 계수를 확정한다.
시리즈
  • 선형 회귀 계산을 통해 계수와 선택 모델을 확정하다
  • 선형 회귀 계산을 통해 계수와 선택 모델 파트 확정2
  • 단회귀 분석을 통해 공헌률을 계산하다
  • 선형 회귀와 특징량의 축소
  • 논리 회귀(분류)와 슈퍼 파라미터 조화
  • 선형 SVC(분류) 및 하이퍼매개변수 조정
  • 비선형 SVC(분류) 및 하이퍼패라메트릭 조정
  • 결정 트리와 슈퍼 파라미터 조정
  • 나무와 초파라미터의 조정 결정 2
  • 결실


    x축은 randam-입니다.나는 state를 0~100까지 흔들었다.Y축은 Score를 나타냅니다.
    왼쪽 그림은 공헌률이 가장 높은 특징량의 단회귀 분석만 사용한다.이것만 사용하면 높은 확정 계수를 얻을 수 없다는 것을 발견했다.중간의 그림은 공헌도 Top5이고 오른쪽의 그림은 공헌도 Top10을 이용한 회귀 분석이다.단회귀 분석에 비해 확정 계수는 상승했지만 값은 여전히 낮다.

    절차.

  • 유방암 데이터 읽기
  • 데이터의 사전 처리
  • 17번째 특징량만으로 단회귀분석
  • 공헌률 상위 5위의 회귀분석
  • 공헌률 상위 10위의 회귀분석
  • 데이터의 드로잉
  • python 기반 설치

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_breast_cancer
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    
    #データの読み込み
    cancer_data = load_breast_cancer()
    j = []
    value_1 = []
    value_2 = []
    value_3 = []
    
    #データの前処理
    df =pd.DataFrame(cancer_data.data)
    df_1 = df.drop(range(0, 4), axis=1)
    df_1 = df_1.drop(range(5, 7), axis=1)
    df_1 = df_1.drop(range(9, 14), axis=1)
    df_1 = df_1.drop(16, axis=1)
    df_1 = df_1.drop(18, axis=1)
    df_1 = df_1.drop(range(20, 24), axis=1)
    df_1 = df_1.drop(range(25, 27), axis=1)
    df_1 = df_1.drop(28, axis=1)
    
    df_2 = df_1.drop(8, axis=1)
    df_2 = df_2.drop(15, axis=1)
    df_2 = df_2.drop(24, axis=1)
    df_2 = df_2.drop(27, axis=1)
    df_2 = df_2.drop(29, axis=1)
    
    #17番目の特徴量のみで単回帰分析
    for i in range(0, 101):
        train_X, test_X, train_y, test_y = train_test_split(cancer_data.data[:, 17], cancer_data.target, random_state=i)
    
        train_X = train_X.reshape((-1, 1))
        test_X = test_X.reshape((-1, 1))
    
        model = LinearRegression()
        model.fit(train_X, train_y)
    
        j.append(i)
        value_1.append(model.score(test_X, test_y))
    
    #寄与率上位5種で回帰分析
    for i in range(0, 101):
        train_X, test_X, train_y, test_y = train_test_split(df_2, cancer_data.target, random_state=i)
    
        model = LinearRegression()
        model.fit(train_X, train_y)
    
        value_2.append(model.score(test_X, test_y))
    
    #寄与率上位10種で回帰分析
    for i in range(0, 101):
        train_X, test_X, train_y, test_y = train_test_split(df_1, cancer_data.target, random_state=i)
    
        model = LinearRegression()
        model.fit(train_X, train_y)
    
        value_3.append(model.score(test_X, test_y))
    
    #データのプロット
    fig = plt.figure(figsize=(20, 5))
    plt.subplots_adjust(wspace=0.2)
    ax = fig.add_subplot(1, 3, 1)
    ax.plot(j, value_1)
    ax.set_title("Feature_17")
    ax.set_xlabel("random_state")
    ax.set_ylabel("Score")
    ax.set_ylim([0, 1])
    
    ax = fig.add_subplot(1, 3, 2)
    ax.plot(j, value_2)
    ax.set_title("Feature_top5")
    ax.set_xlabel("random_state")
    ax.set_ylabel("Score")
    ax.set_ylim([0, 1])
    
    ax = fig.add_subplot(1, 3, 3)
    ax.plot(j, value_3)
    ax.set_title("Feature_17")
    ax.set_xlabel("random_state")
    ax.set_ylabel("Score")
    ax.set_ylim([0, 1])
    
    plt.show()
    

    끝말


    선형 회귀가 한계를 느꼈다.그러나 이것은 공헌도를 계산하는 데 유용한 것 같다.높은 확정 계수를 얻기 위해서 우리는 다른 모델에서 시험을 진행할 것이다.

    좋은 웹페이지 즐겨찾기