LoginSignup
64
96

【Python】pythonで簡単に機械学習入門(SVM)

Last updated at Posted at 2020-11-14

はじめに

機械学習に関する入門サイト見ていると、難しいことが書いてあったりして、知識0の人がとっつきにくい印象があります。
まあテーマとして確かに難しいのでしょうがないですが....
「数学や機械学習の知識が0でも、pythonの知識さえあれば誰でも実装できる」というのを目標に記事を書いていきたいと思います。
今回の記事では難しいことは説明せず、とりあえず機械学習というものに触れてみるというスタンスで、進めていきます。

対象者

・pythonがある程度わかる
・機械学習に興味があるけど、何も知らない
・大学の授業で概要は学んだけど、実際にどう実装すればいいかわからない

環境

python 3.8.5
scikit-learn 0.231

まずはインストール

pip install scikit-learn

csvファイルの読み込みにnumpyを使うのでインストール済みでない方はインストールしてください。

pip install numpy

用語解説

scikit-learnとは

scikit-learn (サイキット・ラーン)(旧称:scikits.learn) はPythonのオープンソース機械学習ライブラリ[2]である。サポートベクターマシン、ランダムフォレスト、Gradient Boosting(英語版)、k近傍法、DBSCANなどを含む様々な分類、回帰、クラスタリングアルゴリズムを備えており、Pythonの数値計算ライブラリのNumPyとSciPyとやり取りするよう設計されている。(wikipediaより)

うん、まあこれを見ても意味がわからないと思うので、今回は簡単に、「機械学習をサポートしてくれるライブラリ」と覚えておきましょう。

SVMとは

サポートベクターマシン(英: support vector machine, SVM)は、教師あり学習を用いるパターン認識モデルの一つである。分類や回帰へ適用できる。
サポートベクターマシンは、現在知られている手法の中でも認識性能が優れた学習モデルの一つである。サポートベクターマシンが優れた認識性能を発揮することができる理由は、未学習データに対して高い識別性能を得るための工夫があるためである。(wikipediaより)

簡単に言うと、下記の画像のように線を引いて、データを分類していく機械学習手法*のことです。
一口に機械学習といっても様々な方法が存在します。
SVM(サポートベクターマシン)はその一つです。

image.png
https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Kernel_Machine.svg/2880px-Kernel_Machine.svg.png
(wikipediaより)

目的変数とは

機械学習で予測したい対象です。
例えば、天気を予測したいときの目的変数は晴れや、曇りや雨などになります。

説明変数とは

予測するために必要な情報のことです。
例えば、天気を予測したいときに必要な、降水量や湿度などがこれにあたります。

データ

データは基本的には数が多いほど精度が高くなりますが、今回はお試しなので、少なめのデータを用意します。
このデータは今年の天気のデータです。
まあ天気データは気象庁のHPにいくらでもあるので、興味が湧いたら見てみてください。
左から、
気温降水量日照時間湿度天気(0:晴れ、1:曇り、2:雨)
を表しています。
このデータで言うと、気温降水量日照時間湿度までが説明変数、天気(0:晴れ、1:曇り、2:雨) が目的変数です。

data.csv
6.6,0,8.2,47,0
7.1,0,5.7,57,1
7.1,0,9.3,62,0
8.1,0,4.7,53,1
6.5,0,9.7,54,0
8,0,8.1,42,1
6.6,1.5,0.5,68,2
5.7,21.5,2.7,94,2
11.2,0,9.3,47,0
9,0,7.9,57,1
8,0,4.5,66,1
7.7,0,1.8,66,2
9.1,0,9.3,70,0
9.1,0,8.3,70,0
7.8,11.5,3.6,79,2
7.6,0,4.4,46,1
7.6,0,3.6,58,1
3.8,13.5,0,87,2
7.3,0,8,62,1
8.3,0,9.7,60,0

ソースコード

weatherを自分の好きな値に変えることで、その条件の時の天気を予測することができます。(ただ、データ数が少ないので、精度は悪いです)
weatherの中でも左から順に
気温降水量日照時間湿度
で並んでいるので、この順に条件を入れてみてください。

weather_learn.py
import numpy as np
from sklearn import svm

# csvファイルの読み込み
npArray = np.loadtxt("data.csv", delimiter = ",", dtype = "float")

# 説明変数の格納
x = npArray[:, 0:4]

# 目的変数の格納
y = npArray[:, 4:5].ravel()

# 学習手法にSVMを選択
model = svm.SVC()

# 学習
model.fit(x,y)

# 評価データ(ここは自分で好きな値を入力)
weather = [[9,0,7.9,6.5]] 

# predict関数で、評価データの天気を予測
ans = model.predict(weather)

if ans == 0:
    print("晴れです")
elif ans == 1:
    print("曇りです")
elif ans == 2:
    print("雨です")


実行結果

$ python3 weather_learn.py 
晴れです

おわりに

今回もお疲れ様でした。
実際に自分が作ったものがこうして結果を吐いてくれるのは嬉しいものがありますよね。
自分が機械学習に初めて触れたときはあまりの情報量の多さに行き詰まったことが何度もありました。
この記事では、「知識はないけど、機械学習に触れてみたい」という方に向けてわかりやすく書いたつもりですが、疑問点やミスがありましたらコメントください。

64
96
4

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
64
96