기계학습의 특징량 공정에서 교착 상태에 빠졌고 주성분을 분석하여 2개 항목의 각도를 구하여 추가하였는데 의외로 정밀도를 높여 놀랍다

입문


...어떤 데이터로 기계학습을 하면 그에 상응하는 정밀도에 도달하지만 그곳에서 정밀도가 높아지지 않아 난감할 때 갑자기 생각이 나서 가벼운 마음으로 해봤다. 제목과 같다.
겸사겸사 말씀드리지만, 이것은 만능이 아닙니다.
시간순으로 반복하기 좋은 것은 이산적인 것은 결과가 없다는 인상을 준다.
그리고 이런 일을 할 수 없는 경우도 있다고 생각해서 사용하는 것은 스스로 판단하는 것이다...
이론적으로 잘못된 점이 있다면 논평에서 지적해 주십시오.
이상, 그런 느낌도 된다면 시도해 보세요.

하고 있는 일의 개요





예제 코드 (추가 전)


여러 가지 상황에 따라 실제 코드를 표시할 수 없습니다. 처리 내용을 추측해 주십시오.
다음 코드를 사용하여 학습과 예측을 한다고 가정하십시오.
original.py
# ライブラリ読込
import pandas as pd
from sklearn import model_selection
from sklearn.ensemble import RandomForestRegressor

# 学習データ読込
df_train = pd.read_csv("train.csv")

# 学習用データ加工
X = df_train[df_train.columns[~df_train.columns.str.contains("y")]]
y = df_train["y"]

# 学習用と検証用に分割
X_train, X_valid, y_train, y_valid = model_selection.train_test_split(X, y, test_size=.2, random_state=42)

# モデル構築
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)
print(model.score(X_valid, y_valid))

# テストデータ読込
df_test = pd.read_csv("test.csv")

# 予測値の取得とCSV出力
y_pred = model.predict(df_test)
pd.DataFrame(y_pred).to_csv("pred.csv")

추가할 코드


학습용 데이터의 X를 구하여 아래의 코드를 추가해 보았습니다.
from sklearn.decomposition import PCA
import math

# 2つの値から角度を求めて、配列を返す関数
def make_radian_row(pca_result):
    rad = []
    for r in pca_result:
        rad.append(math.atan(r[0]/r[1]))

    return rad

# 主成分分析
pca = PCA(n_components=2)
pca.fit(X)

X["rad"] = make_radian_row(pca.transform(X))

예제 코드 (수정 후)


최초의 코드에 추가 부분을 추가한 후 아래와 같다.
edited.py
# ライブラリ読込
import pandas as pd
from sklearn.decomposition import PCA
import math
from sklearn import model_selection
from sklearn.ensemble import RandomForestRegressor

# 2つの値から角度を求めて、配列を返す関数
def make_radian_row(pca_result):
    rad = []
    for r in pca_result:
        rad.append(math.atan(r[0]/r[1]))

    return rad

# 学習データ読込
df_train = pd.read_csv("train.csv")

# 学習用データ加工
X = df_train[df_train.columns[~df_train.columns.str.contains("y")]]
y = df_train["y"]

# 学習用と検証用に分割
X_train, X_valid, y_train, y_valid = model_selection.train_test_split(X, y, test_size=.2, random_state=42)

# 主成分分析
pca = PCA(n_components=2)
pca.fit(X_train)

# 角度データの追加
X_train["rad"] = make_radian_row(pca.transform(X_train))
X_test["rad"] = make_radian_row(pca.transform(X_test))

# モデル構築
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)
print(model.score(X_valid, y_valid))

# テストデータ読込
df_test = pd.read_csv("test.csv")

# 角度データの追加
df_test["rad"] = make_radian_row(pca.transform(df_test))

# 予測値の取得とCSV出力
y_pred = model.predict(df_test)
pd.DataFrame(y_pred).to_csv("pred.csv")

결과


80% 후반대의 정밀도는 90% 초반의 정밀도에 이르렀다(^_^
그럼 이제 뭘 할 거예요?

좋은 웹페이지 즐겨찾기