新規ブログに移行しました。
機械学習(1)基礎知識
はじめに
大学の研究で機械学習を勉強しているのですが、配られた教科書がめちゃくちゃ難しいので、かみ砕いてまとめます。
3種類の機械学習
教師あり学習
機械学習において分かりやすい例の一つとしてデータの分類というのがあるので、この分類を用いて説明していきます。
分類というのは、簡単に言えば「A・B・Cで分けるならお前はA、お前はC、お前は…」というようにデータを一つ一つ分けていくことです。
教師あり学習では、正解の分類先が分かっている状態で機械学習アルゴリズムにデータを入れて分類をさせてみるのです。
それで出てきた予測が答えと間違っていたら、アルゴリズムを修正するというのを繰り返して制度の高いシステムを目指す学習です。
問題集の問題を解いては答え合わせをして学力アップを図る受験生のようなものですね。ここでいう問題集の答えが「教師」になります。本書では「ラベル」と表しています。
強化学習
エージェントと呼ばれる機械学習システムが、環境と呼ばれる対象に何かしらのアクションを起こします。それに対して環境がエージェントに報酬を与えます。エージェントがより多くの報酬を求めて、状況に応じたアクションを取っていくことで制度の高いシステムが完成していきます。
強化あり学習との違いは、ラベル(答え)のようなはっきりしたもので評価をしないという部分です。道徳みたいな感じでしょうか。すみません、忘れてください…。
分かりやすい例としては、チェスがあります。エージェントがチェス盤という環境でコマを動かし、「勝ち」や「負け」といった報酬が与えられてエージェントはどんどん強くなります。
教師なし学習
教師あり学習での説明を読むと分かるのですが、教師なし学習はその名の通り、答え合わせをするための答え(教師)がありません。
教師なし学習が使われる例として、クラスタリングというものがあります。
クラスタリングは、大量の情報を意味のあるグループに分けて構造化する手法です。特徴が近いデータをまとめて、線引きしていくのです。この線引きされたグループのことを本書では「クラスタ」と呼んでいます。
例えばマーケティングにおいて、顧客のタイプを分けて構造化することができるでしょう。
クラスタリングと分類の違い
クラスタリングでは分けるためのグループを最初から用意しません。ただの「線引き」と考えればいいですね。
機械学習の用語
訓練データ
データセットを表すテーブルの行(レコード)。
顧客リストが訓練データの場合、顧客一人一人のことを指します。
訓練
モデルのパラメータを調節し、モデルを適合させること。
つまり機械学習を通してシステムの制度を上げていくことですね。
モデル
ちなみに補足ですが、モデルというのはシステムそのものの仕組みを指します。
例えば「顧客リストをタイプ別に分類するモデル」とかです。
特徴量
データテーブルの列(カラム)。xで表す。
顧客リストであれば、「名前」「年齢」「性別」などです。
目的変数
予測したい変数。yで表す。
例えば「この顧客の性別を予測したい!」というときは目的変数は「性別」となります。
損失関数
誤差関数とも呼ばれ、コスト関数と同義で使われることが多い。
詳しくは後ほど出てきたときに。
機械学習システム構築手順
- 前処理(データ整形)
- 予測モデルの訓練と選択
- 予測モデルの評価と未知のインスタンス予測
1では、どの特徴量を使うかなどを決めて意味のあるデータを用意します。
2では、正解率などの指標を基に、どのモデルが最も適しているかを検証し、選びます。
3では、選んだモデルの性能に納得がいけばいよいよデータを予測します。
まとめ
言葉だけで簡単に説明できるのはここまででしょうか。
今は第4次産業革命の最中なので、AIに通じる機械学習という激熱の分野をマスターし、最前線で活躍できるようになりたいです。
次回からは実践的なところを勉強していきます。
プログラミングを勉強しとけばいいと言われる理由
プログラミングを勉強すれば将来金持ちになれるって聞いたよ?
なぜプログラミングを勉強する、もしくはしたいのですか?
多くの人が、将来の自分のため的なことではないでしょうか。私はそうでした。
つまり仕事に困らず、しかも給料もいいんじゃない?ということですね。で、きっとこれは概ね合ってるでしょう。私自身エンジニア就活していても分かったことです。
ではプログラミングを勉強していればなぜ、どのように将来に役に立つのかを私なりにまとめてみました。今から勉強しようと思っている方は是非背中を押されてください!
プログラミングを勉強しとけばいいと言われる理由
1.圧倒的需要
「仕事に困らない」というのはつまり「需要がこれからもあり続ける」ということと同義です。
というかむしろ、今現在エンジニア不足と言われていて、さらに2030年にはITスキルを持った人材が約60万人不足すると言われているくらいですからプログラミングできる人材は売り手市場でしょう。
ここで注目したいのが、これはプログラマーという職業だけでなく、あらゆる業界にIT人材が必要であるということです。詳しくは次で見てみましょう。
2.第4次産業革命
第4次産業革命って聞いたことありますか?
第3次までなら…という方は多いんじゃないでしょうか。
ちなみに第1次は18世紀の蒸気機関、第2次は19世紀半ば~20世紀初頭の電気、第3次は1970年代初頭のコンピュータです。
あれ?じゃあ今って第3次産業革命で終わってるんじゃないの?って最初私は思ったんですが、2010年頃からはAI・IoTによる第4次産業革命だったのです!
機械が自動で何らかのシステムを組み立てて作動するための人工知能(AI)や、身の回りのたくさんのモノがインターネットによって繋がるIoTの時代です。
農業、医療、スポーツ、エンタメ、アパレル、食品、観光…全ての業界がITとは切っても切れない縁を持つようになりました。
そんな中でITスキルが不足だなんて言われるんだから、ITスキルなんてなんぼ持っててもいいですよね。
3.プログラミングの一般教養化
そんな時代に先駆けて(むしろ手遅れ感もあるけれど)、2020年から小学校、中学校、高校と段階的にプログラミングの必修化が始まったのをご存じですか?
これを聞いて私は最初
「あらま、科目が増えて大変だわね、お疲れ様だわね」
と、人ごとのように思っていたのですが、よく考えたらこれはなんと恐ろしい!
想像してみてください、第4次産業革命のこの時代の中で将来、プログラミングなんて一般教養なんだぜとか言ってるやつらがどんどん入社してくる地獄を。
高校最後の夏の大会直前に、いきなり昨年全中を制覇したやつら全員が、自分のただの公立高校に入学して新入部員として入部してくるようなもんですよ。
レギュラーとられないように練習しなくちゃ…。
就活の時点でプログラミングスキルを役に立たせる方法
じゃあプログラミングを勉強して、就活でどうやってスキルを証明すればいいの?って話ですが、方法は大きく分けて二つあるでしょう。
一つ目は資格です。
資格はいくつかありますが、エンジニア就活をするのであればとりあえず基本情報技術者試験という国家試験がおすすめだそうです。
ITパスワードなどのもっと基礎的な試験もあるのですが、多くのプロの方が「これはエンジニアにはあまり効果がない」というのを聞きます。エンジニア目指してないけどITの知識を身につけたい方は勉強するといいかもですね。
二つ目は成果物です。
成果物とは、実際に自分で作成したアプリなどのソフトです。これを企業に見せて説明するだけです。
資格よりも効果があると言われたりもします。実際私は、資格は一切持っておりませんが自分で開発したオリジナルSNSをアピールすることでエンジニアとして内定をもらいました。
どうやって勉強すればいいの?
これに関してはまた記事にさせていただこうと思います。
まとめ
つまりプログラミングを勉強するといいことだらけってことですね。
ただし、プログラミングには向き・不向きがあります。そのあたりの話は
プログラミングは誰にでもできる、、のか? - プログラミング大学生のつぶやき
でお話しています。
一緒に頑張っていきましょう…
プログラミングは誰にでもできる、、のか?
プログラミングを大学生に教えてて思ったこと書きます
「プログラミングは誰でもできる!」とか、「初心者でも大丈夫!」とかきいたことありませんか?
僕は以前、半年間ほどとあるオンラインプログラミングスクールで講師と運営の仕事を長期インターン的な感じでやっていたことがあります。
そこではいろんな人にプログラミングを教えたり、またそもそもプログラミングを知らない人に興味を持ってもらってスクールに入会させたりしていました。
そのスクールは個人的には安くて質も良い素晴らしいサービスだと思いました。僕自身受講生として勉強していたとき、満足できるアプリを開発することができました。
僕もこんな成功体験をいろんな人に届けたい!と思ってこのスクールの講師になったのです。そこで感じたことをここに書いてみました。
「プログラミングは皆やるべき」
業務の中には、スクールの入会数を増やすためのイベントや説明会の開催もありました。そこでは様々な人にプログラミングの重要性と可能性を話しました。
当時僕は、自分の経験を通してプログラミングは誰でもできると確信していたし、日本人全員が勉強するべきだと信じて、周りの友達も誘ったり情報を発信したりしていました。
プログラミングをやるべき理由
- これからの将来で予想される圧倒的需要
- 小・中・高で必修化されたことで、プログラミングができないと不利な時代が来る
- 文系・理系関係なく勉強できる
個人的に強く推してたのはこのあたりでしょうか。
まあこれは知っている人も多いし、これを聞いて入会してくれる人もたくさんいました。
「将来大事そうだから」「なんとなく、できるようになりたいから」「仕事に困らなさそうだから」という感じでいろんな人が入会してくれました。将来のために自己投資するのは本当に大切なことだと思います。
講師としてプログラミングを教えてみた
そしていざ、受講生たちにアプリ開発をすることをゴールにプログラミングを教えました。
すると、1~2か月とか途中で飽きちゃう人が思ったより多かったんですよね。
もちろん自分の教え方とか、環境面での要因もあったと思うんですけど。
3か月後の学習状況としては、あくまでも僕の感覚ですが
- 10%の人が完全に挫折
- 30%の人がアプリ開発はできなかったけど3か月完走
- 30%の人が唇を噛みしめながらとりあえずアプリ開発まではできた
- 30%の人が熱心にプログラミングを勉強してこだわったアプリを開発
という感じでしょうか。
ちなみに受講生は全員大学生です。だから社会人とかも対象になってくると変わってくると思いますが。
つまりプログラミングは誰でもできるけど適正はあるよねってだけのあたりまえの話
プログラミングは誰でもできるし、勉強すれば将来安泰だというのはなんとなく聞いたことがあったり、一般的な印象だと思います。
でもゲームとか楽器、スポーツとかと一緒で、確かに誰でもできるけど、楽しんでできる人が結局続くし、プロとしても活躍できる可能性があるんですよ…っていうのは、よく考えたら当たり前ですよね…。
この記事で言いたかったことは、プログラミングを勉強しようと思う人は、とりあえず最小限の投資で始めてみてくださいってことです。いきなりスクールとかに入らず、本とかネットだけでもできることはあります。
で、面白いと思えばどんどん続ければいいし、面白くなければ続ける必要は全くないですね。ITに関する最低限の知識があれば他の場面でも役に立つかも、くらいの程度です。
しかし何事もやってみなくては分かりません!最小限のお金でいろんな興味のあることに挑戦することも大切ですね!
やべぇ高校生とアプリ開発をしている話
先輩と立ち上げたアプリ開発プロジェクトのメンバーが少しずつ増えてきているのだけれど、新しく入ってきた子の中にすごいやつが紛れていた。いや、すごすぎて紛れることすらできず、存在感で浮いてるのだけども!
結論、どんな子かというとプログラミングが大好きで、小6からずっとアプリ開発をしているという高校生1年生である。
先日のオンライン勉強会で始めて話したとき、どうしてプログラミングをしようと思ったのと聞くと、
「小学生のときに親からパソコンをもらって、でもYouTubeとかには飽きたので何をしようかと考えたところ、アプリ開発があるじゃんってなって、そこからずっとやってます。」
とのこと。
アプリ開発があるじゃん、じゃないのよ。そうはならないのよ。
小6がパソコンでできたのはせいぜいアメーバピグまでだったのよ。
…いや、ほんでYouTubeに飽きることってあるの!?
まあそんな高校生プログラマー君が非公式だけどプロジェクトに参加するということで、めちゃくちゃ頼もしいし、いろんなこと聞きたい!なにしろ経験値が違うので笑
ぶっ倒れる寸前までGo言語・SendGrid・REST APIでお問い合わせメール送信APIを作った話
起:経緯
今大学で、先輩と立ち上げたアプリ開発のプロジェクトでモバイル開発をやってるんですけど、個人開発では今までやったことのない「API」の開発をしました。
正直APIって、なんとなく知ってはいたけど仕組みとか作り方とか全く知らんかったので、最初にこれを作ってほしいと言われたときは「あ、了解でーす♪」ってメッセージで返事をしながらもその手は汗ばんでいました…。
技術的な内容
コード内容や実装方法はこちらにまとめました。
承:人生は思った通りに…
ほんとに、なにすればいいかわからなかったので、テキトーに「Go言語 お問い合わせメール API」とかなんとか、なんとかかんとか検索しながら情報を集めました。
そしてまずたどり着いた答えが、「とりあえずSendGridに登録すりゃええんか」ということで、アカウント申請をしました。
しかし僕の登録内容が不十分で普通一発で審査が通るところを、いろいろやりとりしてたら3日くらいかかりました。。。
まあこれであとはQiitaとかネットに書いてある通りにやればできるだろうと、コピー&ペーストで実行(ッターン)で、うまくいかないんですねこれが。
思った通りにいかないだろうと思っていたら、本当に思った通りにいかなかったので、やっぱり僕の人生は思った通りです。…え?。
転:死闘の末に
その日は一旦諦めて、次の日に戦うことにしました。
そして翌日、朝10時頃にデスクに向かう。大きく深呼吸。わかっていた。これから死闘が始まることを。そして僕はそのままパソコンを開いて、次にデスクから離れたのはその8時間後の夜18時でした…。しかし僕は戦いに勝ったのです。
結:チームのために
こんなに頑張れたのも、チーム開発だからでしょうか。
みんなのためにも絶対に完成させるんだ!って夢中になってなんとか完成できたことを皆に報告、ができるものチーム開発だからですね。
あぁ、これから何回こんな戦いをしなくちゃいけないんだろ…(ワクワク)(※Mじゃないです。)
3年生だけどレバテックルーキーでITエンジニアの内定をもらうまでの話
この記事はオリジナルブログの方で、同じ内容を修正して再投稿しています。よろしければこちらからご覧ください。
今日は、僕がITエンジニアとしての内定を頂くまでの話をします!自分はまだ3年生なんですけど、12月の頭に内定を頂きました。
別に内定は早けりゃいいってことではないんですが、一つでも早く取ってるとめちゃくちゃ気が楽です。
ITエンジニアは、会社にもよりますが通常の就活解禁の3月よりも早く内定をもらいやすい職業の一つなんです。だからもしエンジニア就活をする人がいれば、「周りがしていないから」という理由で就活を後回しにせず、2年生の夏までには動き始めた方がいいでしょう。
ということで、特にITエンジニアの就職を考えている方は是非最後までご覧ください!
※この記事の内容はあくまで僕の経験したパターンのお話です。
1. レバテックルーキーとは
偉そうに内定を3年生のうちにもらったと言いましたが、僕は就活の半分をレバテックルーキーさんに任せていました。
レバテックルーキーとは、ITエンジニア就活のための就活エージェントサービスです。
くわしくはこちらのHPから
完全無料
最後まで完全オンライン・完全無料です。おそらく紹介した企業の方から報酬もらうシステムなので、僕たちに必死に企業を紹介してくれるんだと思います。(完全な想像です笑 実際にサービスを受けていてそんな必死さは全く感じませんでした!)
個人メンター制で自分に合う企業を0から探せる
全員に一人の担当メンターがついて、IT業界に関して無知であっても面談をしながら自分に合う企業を探してくれます。
無駄な思考・工程を省ける
そして個人的に素晴らしいと感じたのは、ES(エントリーシート)を一つ提出すれば、あとは基本的にレバテックルーキーが全ての選んだ企業さんにエントリーを勝手にしてくれるというシステムです。
そして説明会、面接などの予定に加えてさらに、その企業の面接で聞かれそうなこと、先輩たちのアドバイス、服装(スーツなのか、私服なのか)なども伝えてくれます。僕はただそれに従って準備をして当日に挑むだけです!
2. 就活の流れ
流れは大きく分けて
- 面談・企業選び
- ESや提出物などの準備
- 選考
この1~3を繰り返したりしながら進めていきました。
まず「1.面談・企業選び」では、メンターの方に自分がどんなエンジニアになりたいのか、どんか会社に就きたいのかなどを伝えて、企業を紹介してもらいました。
ここは大事なところなので何日かかけてじっくり行いました。
準備しておいた方がいいものとしては、就活の軸を2つほどと、将来どんなエンジニアになりたいかという理想像です。このときに注意で、まだ企業の選考の面接ではないのでマイナスな思いや不安なことなども、あれば必ず伝えるようにした方がいいと思います。
たとえば、「○○な仕事はしたくない」とか、「自分はこういう会社に向いているのだろうか」などでしょうか。
とにかく大事なフェーズなので、不安や不満は無い状態で選考に入れるようにしましょう。まあそのあたりもメンターの方がしっかりケアしてくれましたけども!
ちなみに就活の軸、というのは例えば「アイデアを形にできるエンジニア」とか、「インフラのシステムを開発するエンジニア」など、求める条件や理想を具体化できるところまで具体化したものです。こだわりがなくて抽象的になってしまっても大丈夫ですが、これだけは譲れない!っていうものを探しておいた方がいいです。
で、僕はあまり業界に関して細かいこだわりがなかったので、紹介してもらったところ全部受けました!10社ちょいありましたね。こだわりがなければその分視野は広がる…!(名言風)
次に、「2.ESや提出物などの準備」ではその言葉通り、選考に向けて必要なものを準備していきました。
ESはレバテックルーキーからExcel形式のテンプレートを渡されたので埋めていきました。ここで成果物がある人はそのプログラムやURLを張り付けることができます。成果物というのは自分で作ったアプリなどのソフトウェアのことです。
僕は直前に完成したWebアプリのURLと、そのコードが入っているGitHubのURLを貼り付けました。やっぱり成果物は一目でその人の経験やレベルを見ることができるので、あったら強いですね~。
そしていよいよ「3.選考」ですね!
ここはもう言われた日の言われた時間に、言われた通りに準備してイベントをこなしていきます。僕が受けたところは全部オンラインでした。
もちろん書類審査で落とされることもめちゃくちゃあります。ぼくは半分くらいの企業は面接をしないうちに落とされました。
もし面接で落とされた場合、レバテックルーキーを通じてフィードバックもらうことができます。つまりなんで落とされたかを聞くことができるのです笑。まあ100%それが企業の本音かは分かりませんが、確実に次に活かせます。(メンタルちょっとやられますが笑)これもレバテックルーキーならではじゃないでしょうか。
そんなこんなで、ほぼ全滅しては新たに紹介してもらったり、その度に第1志望を変えたりしながら、なんとかそのとき第1志望だった東証一部上場企業から内定をいただきました!もともと知らない企業でしたが、事業内容も社員さんの雰囲気にも魅力を感じたので、もうそこに決めました。
3. レバテックルーキーに向いてる人・向いてない人
そんな至れり尽くせりのレバテックルーキーですが、調べてみると不評や、不満を感じた学生も一定数いるようです。実際、僕の紹介で一人の友人がレバテックルーキーに登録したのですが、あまりうまくいってないようでした。
これはなぜか!というと自分なりの答えは簡単で、個人的にレバテックルーキーに向いてない人というのは次のような人かなと思います。
- プログラミングはあくまでも選択肢の一つであって、ITエンジニアに絞っているわけではないという人
- ITエンジニアは確定。しかも業界や開発分野に加えてさらに応募したい会社まである程度決まっている人
この二つは真逆ですが、僕の友人は前者でした。だって当たり前ですけど、レバテックルーキーではゴリゴリにITエンジニアを目指す就活になりますからね。
ネットで「いい会社が全然ない」って言ってる人は後者なのかなと…。
逆に、
「ITエンジニアになることは確定だけど、会社とか全然知らんし何からすればいいかわからん。正直ある程度よさそうならどこでもいいから内定ちょうだい」
っていう人にはおすすめします。ITエンジニアで就活している人ならわかってくれると思うんですけど、ITエンジニアを募集している企業って死ぬほどあるんですよね笑。それを厳選してくれるならもうレバテックルーキーに任せてもいいや、って思ったんです。
まとめ
いろいろ経験を語りましたが、結論自分はレバテックルーキーに助けられたということです。
もし就活で行き詰ったら仲間やこういうサービスを頼ってみるのも手段の一つってことですね。逆にうまくいってる人はやり方を無理に変えずそのままいけるところまでいっちゃいましょう!
皆様の就活がよい結果になりますように…。