2
2

More than 1 year has passed since last update.

色情報の特徴量をRGBで表現する

Last updated at Posted at 2022-03-11

はじめに

色情報が"Green"や"White"などの文字列で表現された特徴量があるとする。
これを特徴量としてベクトル変換する際、以下のような方法が考えられる。

  1. one-hot変換する
  2. いくつかの色カテゴリに分類する。

問題点として1の手法では次元が多くなってしまい、2の方法では手動でカテゴリを適切に設定する必要がある。

この記事では、色情報をwebcolorsというライブラリを使ってRGB変換し、それぞれを比例尺度の特徴量とすることを提案する。

表で表すと以下のようなテーブルがあった際に

color
1 white
2 blue
3 red
4 green

以下に変換する

red green blue
1 255 255 255
2 0 0 0
3 255 192 203
4 255 165 0

こうすると色情報を比例尺度で表すことができるため有利な気がする。

実装

webcolorsは色文字列を受け取ってrgbを返してくれるライブラリである。これを利用することでRGB変換を実現する。
実装例をいかに示す。

# 名前をRGB変換する
import webcolors
def convert_color_name_to_rgb(color_name: str):
    color_name = color_name.lower().replace(" ","")
    try:
        return webcolors.html5_parse_legacy_color(color_name).red, webcolors.html5_parse_legacy_color(color_name).green, webcolors.html5_parse_legacy_color(color_name).blue, False

    except ValueError:
        return 125,125,125, True



df[['color-red','color-green','color-blue','color-ValueError']] = df.apply(lambda x: convert_color_name_to_rgb(x["color"]),axis=1 ,result_type='expand')
df = df.drop('color', axis=1)

# ValueErrorは削除する
df = df[df["color-ValueError"] == False]
df = df.drop("color-ValueError", axis=1)

注意

webcolorsでうまく変換できない色があるっぽい?

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2