紙媒体で管理するとなくなりがちなのでブログで進捗などを管理することにしました
※殆どの記事は自分自身のためだけにかいています.他人に見せられるレベルには至っていません...

【Windows】Anaconda環境にOpenCVを入れる

https://anaconda.org/conda-forge/opencv
これの通り

過学習の起こる理由

過学習は訓練用事例の中のノイズ等によるデータ内のいくつかの以上を学習器が正解と誤って認識することに起因する.

決定木において過学習の対策は, 枝刈りによって行われる.

【Cygwin】 ホームディレクトリを変更する

Cygwinのterminal上ではなく, ホストOSであるWindows環境変数を設定する必要があるそう.
デスクトップ上にCygwinのホームディレクトリを置きたい場合
環境変数名: HOME
パス: /cygdrive/c/Users/username/Desktop
のようにWindows環境変数を設定する.

【Haskell】 whereブロック内の関数

これまではwhere内は変数を定義してきたが, 関数も定義できる.

calcBmis :: [(Double, Double)] -> [Double]
calcBmis xs = [bmi w h | (w,h) <- xs]
    where bmi weight height = weight / height^2

これは入力は[(Double,Double)]型より, Double型のペアのリストである.
出力はDouble型のリストである.
関数calcBmisの出力部分で, [bmi w h | (w,h) <- xs]について, まず(w,h) <- xsで入力xsに対してパターンマッチングによりペアのそれぞれの値をw, hに渡す.
bmi w h により, wとhを引数とする関数bmiを呼ぶ.
そのbmiはwhere内に定義されている.

【Haskell】 whereの中でパターンマッチを用いる

initials :: String -> String -> String
initials firsname lastname = [f] ++ ". " ++ [l] ++ "."
    where (f:_) = firstname
          (l:_) = lastname

initialという関数はString型の引数を2つとる.
firstnameとlastnameをとって, whereの中でパターンマッチにより, f, l にそれぞれfirstnameとlastnameの
最初の文字がマッチングされる.
関数の出力部分で, [Char]型の連結が行われる.
([f]は[Char]型)

【Haskell】 比較関数を独自定義

myCompare :: (Ord a) => a -> a -> Ordering
a `myCompare` b
    | a == b    = EQ
    | a <= b    = LT
    | otherwise = GT

max' :: (Ord  a) => a -> a -> a
max' a b
    | a <= b    = b
    | otherwise = a

GHCiで:l *.hsで実行する.

Prelude> :l sample.hs
[1 of 1] Compiling Main             ( sample.hs, interpreted )
Ok, modules loaded: Main.
*Main> 3 `myCompare` 4
LT
*Main> 3 `myCompare` 1
GT
*Main> 3 `myCompare` 3
EQ
*Main> max' 3 4
4
*Main> max' 3 2
3
*Main> max' 3 1
3
*Main> max' 3 3
3

【Haskell】 asパターン

asパターンは値をパターンに分解しつつ, パターンマチ位の対象となった値自体も参照できる.
xs@(x:y:ys)はx:y:ysと合致するものと同じものと合致しつつ, xsで元のリストそのものにもアクセスできる.

firstElement :: String -> String
firstElement "" = "empty"
firstElement all@(x:xs) = "the first element of" ++ all ++ "is" ++ [x]

最後の[x]は
そのままのxだとChar型だが, [x]にすると[Char]型 = String型となり, ++で連結できる.

【Haskell】 head関数の独自定義

head' :: [a] -> a
head' [] = error "Can't call head on an empty list, dummy!"
head' (x:_) = x

【Haskell】 リストのパターンマッチとリスト内包表記

let xs = [(1,3), (4,3), (2,4), (5,3), (5,6), (3,1)]
[a+b | (a,b) <- xs]
-- [4, 7, 6, 8, 11, 4]

[x*100+3 | (x,3) <- xs]
-- [103, 403, 503]

【Haskell】 型同士の演算

:t (*)
(*) :: Num a => a -> a -> a

これは2つの同じ型を引数にとって, 1つの同じ型を出力として返すということ.
つまりIntとInteger, Floatなど一見同じ数値でも違う型同士の演算は出来ない.

length は
length :: [a] -> Int
という定義のため, 例えば2.8のような浮動小数と演算ができない.
そういうときはfromIntegralを使う

fromIntegral (length [1..4]) + 3.2