Python

【Python】決定木のラベルの日本語の文字化けを解消する

この記事は約5分で読めます。

 

 

業務の分析案件で決定木をプロットする必要があり

GraphVizで決定木を出力したのですが、その際に日本語を含むラベルが文字化けしてしまい、解消するのに色々と調べたのでその結果をメモしておこうと思います

 

関連記事:【Python】Scikit-learnで作成した決定木のモデルを可視化する

 

スポンサーリンク
スポンサーリンク

決定木のラベルの日本語の文字化けを解消する

 

ライブラリのインストール

 

決定木のプロットには内部でgraphvizを使用するのでこれもインストールしておく必要があります

 

$ pip install lightgbm 
$ pip install graphviz

 

サンプルコード

 

import warnings
warnings.simplefilter('ignore', UserWarning)
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (10, 6)  
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)

# あえて特徴の名前を日本語にする
iris.feature_names = ['萼片の長さ(cm)', '萼片の幅(cm)', '花弁の長さ(cm)', '花弁の幅(cm)']
lgb_train = lgb.Dataset(X_train, y_train, feature_name=iris.feature_names)
lgb_eval = lgb.Dataset(X_test, y_test, feature_name=iris.feature_names, reference=lgb_train)
params = {'seed': 0, 'task': 'train', 'boosting_type': 'gbdt', 'objective': 'multiclass',
          'metric': {'multi_logloss'}, 'num_class': 3, 'learning_rate': 0.1,
          'num_leaves': 20, 'min_data_in_leaf': 3, 'num_iteration': 10, 'verbose': -1}
model = lgb.train(params, lgb_train, valid_sets=lgb_eval,
                  early_stopping_rounds=20, verbose_eval=False)
model.save_model('model.txt', num_iteration=model.best_iteration)
y_pred = model.predict(X_test, num_iteration=model.best_iteration)
y_pred_max = np.argmax(y_pred, axis=1)
accuracy = accuracy_score(y_pred_max, y_test)
print(f'accuracy score: {accuracy:0.4f}')

# 以下で可視化すると日本語が表示できず豆腐がもたらされる (※ 環境設定による)
# lgb.plot_tree(
#     model, tree_index=0, show_info=['internal_value', 'data_percentage'],
#     orientation='vertical')
# plt.show()

# create_tree_digraph には graphviz.Digraph のコンストラクタに渡すパラメータを指定できる
graph = lgb.create_tree_digraph(
    model, show_info=['internal_value', 'data_percentage'],
    orientation='vertical',
    node_attr={'fontname': 'M PLUS 1', 'fontsize': '11'},  # 日本語フォント
    edge_attr={'fontname': 'M PLUS 1', 'fontsize': '10'},  # 日本語フォント
)
graph.format = 'png'
graph

 

 

 

参考:https://qiita.com/CookieBox26/items/0bab0d3868b853167210

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました