人工知能-プログラミング-Fizz Buzz
タイトルの説明:
プログラムを書いて遊びに来なさいこれはゲームです.プレイヤーは1から100まで数え、数字が3で割り切れると「fizz」と呼び、5で割り切れると「buzz」と呼び、両方が満足すれば「fizzbuzz」と呼び、そうでなければ直接数字を言う.このゲームはまるで:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 …
一.従来の方法のプログラミング
メリット:現在の問題を100%正しく解決する コード行数が少ない データに依存しない 解釈可能 二.AIプログラミング
機械学習には3つのステップが必要です.特徴工程は、できるだけデータ特徴を抽出し、 を数字で表す.データトレーニング、データの観察分析を行い、適切なアルゴリズム を見つけた.モデル予測、モデルの精度を分析し、最適化する KNN分類アルゴリズム:
特徴:試験精度は100% ではないコード行数が多い 依存データ 解釈不可能
プログラムを書いて遊びに来なさいこれはゲームです.プレイヤーは1から100まで数え、数字が3で割り切れると「fizz」と呼び、5で割り切れると「buzz」と呼び、両方が満足すれば「fizzbuzz」と呼び、そうでなければ直接数字を言う.このゲームはまるで:
1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizzbuzz 16 …
一.従来の方法のプログラミング
def fizz_buzz(num):
if num % 3 == 0 and num % 5 == 0:
return "fizz buzz"
elif num % 3 == 0:
return "fizz"
elif num % 5 == 0:
return "buzz"
else:
return str(num)
for i in range(100):
print("%d : %s" % (i+1, fizz_buzz(i+1)))
1 : 1
2 : 2
3 : fizz
4 : 4
5 : buzz
.......
96 : fizz
97 : 97
98 : 98
99 : fizz
100 : buzz
メリット:
機械学習には3つのステップが必要です.
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
"""
knn :
"""
# :
#
# ,
# : 0, 1, 2, 3
# : ,
def fizz_buzz_label_data(num):
if num % 3 == 0 and num % 5 == 0:
return 0
elif num % 3 == 0:
return 1
elif num % 5 == 0:
return 2
else:
return 3
#
# ,
# :
# 1: [1, 1] -> 3
# 2: [2, 2] -> 3
# 3: [0, 3] -> 1
# 4: [1, 4] -> 3
# 5: [2, 0] -> 2
# ........
# 15: [0, 0] -> 0
def feature_engineer(num):
return [num % 3, num % 5]
# , ,
# 101- 200
train_data_x = np.array([feature_engineer(i) for i in range(101, 201)])
train_data_y = np.array([fizz_buzz_label_data(i) for i in range(101, 201)])
# :
# k 5, ,
model = KNeighborsClassifier(n_neighbors=5)
model.fit(train_data_x, train_data_y)
# :
#
test_data_x = np.array([feature_engineer(i) for i in range(1, 101)])
test_data_y = np.array([fizz_buzz_label_data(i) for i in range(1, 101)])
#
predict_y = model.predict(test_data_x)
print(" : %s" % predict_y)
#
model_score = model.score(test_data_x, test_data_y)
print(" : %s" % model_score)
#
def predict_num(num):
num_label = model.predict(np.array([feature_engineer(num)]))[0]
if num_label == 0:
return "fizz buzz"
elif num_label == 1:
return "fizz"
elif num_label == 2:
return "buzz"
elif num_label == 3:
return str(num)
for i in range(100):
print("%d : %s" % (i + 1, predict_num(i + 1)))
: [3 3 1 3 2 1 3 3 1 2 3 1 3 3 0 3 3 1 3 2 1 3 3 1 2 3 1 3 3 0 3 3 1 3 2 1 3
3 1 2 3 1 3 3 0 3 3 1 3 2 1 3 3 1 2 3 1 3 3 0 3 3 1 3 2 1 3 3 1 2 3 1 3 3
0 3 3 1 3 2 1 3 3 1 2 3 1 3 3 0 3 3 1 3 2 1 3 3 1 2]
: 1.0
1 : 1
2 : 2
3 : fizz
4 : 4
5 : buzz
6 : fizz
........
98 : 98
99 : fizz
100 : buzz
特徴: