선형 회귀와 특징량의 축소
개시하다
선형 회귀를 실행할 때 어떤 모델이 가장 효율적인지 시도해 보세요.데이터는 scikit-learn의breaast캔서로 이루어지다.이 데이터는 웨이스콘신 유방암 데이터 집합이라고 불리며 종양이 양성인지 악성인지를 판정한다.데이터는 569개로 양성 212개, 악성 357개, 특징량 30개였다.이 데이터를 사용하여 종양이 양성인지 악성인지 판정하는 모델을 만들고 결정 계수가 가장 높은 모델을 선택한다.
지금까지의 경과에 따르면 가장 큰 확정 계수를 가진 모델은 선형 회귀였지만 확정 계수는 0.73에 이르지 못했다.확정 계수를 높이기 위해 공헌률이 높은 특징량을 추출하여 계수를 확정한다.
시리즈
결실
x축은 randam-입니다.나는 state를 0~100까지 흔들었다.Y축은 Score를 나타냅니다.
왼쪽 그림은 공헌률이 가장 높은 특징량의 단회귀 분석만 사용한다.이것만 사용하면 높은 확정 계수를 얻을 수 없다는 것을 발견했다.중간의 그림은 공헌도 Top5이고 오른쪽의 그림은 공헌도 Top10을 이용한 회귀 분석이다.단회귀 분석에 비해 확정 계수는 상승했지만 값은 여전히 낮다.
절차.
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()
끝말
선형 회귀가 한계를 느꼈다.그러나 이것은 공헌도를 계산하는 데 유용한 것 같다.높은 확정 계수를 얻기 위해서 우리는 다른 모델에서 시험을 진행할 것이다.
Reference
이 문제에 관하여(선형 회귀와 특징량의 축소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/FujiedaTaro/items/3fd874ae91b511eb1d1f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
선형 회귀가 한계를 느꼈다.그러나 이것은 공헌도를 계산하는 데 유용한 것 같다.높은 확정 계수를 얻기 위해서 우리는 다른 모델에서 시험을 진행할 것이다.
Reference
이 문제에 관하여(선형 회귀와 특징량의 축소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/FujiedaTaro/items/3fd874ae91b511eb1d1f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)