import numpy as np import pandas as pd import matplotlib.pyplot as plt from module import k_nearest, normalization #iris_dataを取得しランダムに並べ替える iris_data = pd.read_csv("iris.csv", encoding="utf-8").sample(frac=1) #データとラベルにわけ配列の形に変換する datas = iris_data.loc[:, [ "SepalLength", "SepalWidth", "PetalLength", "PetalWidth" ]].values labels = iris_data.loc[:, "Name"].values #データを正規化 datas_n = normalization.normalization(datas) #kの値を1から30まで変えてk近傍法を行う accuracies = [] for k in range(30): count = 0 #一つ抜き法 for i in range(len(datas)): test_data = datas_n[i] train_data = np.delete(datas_n, i, 0) test_label = labels[i] train_label = np.delete(labels, i) label = k_nearest.k_nearest(k + 1, train_data, train_label, test_data) #k近傍法による推定値と実際のラベルが等しければカウントを追加 if label == test_label:
test_data = pd.read_csv("auto-mpg-test.csv", encoding="utf-8").sample(frac=1) #データを配列に変換 mpg = auto_mpg_data.loc[:, "mpg"].values inputs_all = auto_mpg_data.loc[:, [ "cylinders", "displacement", "weight", "acceleration", "model_year", "origin" ]].values mpg_test = test_data.loc[:, "mpg"].values inputs_all_test = test_data.loc[:, [ "cylinders", "displacement", "weight", "acceleration", "model_year", "origin" ]].values #正規化 mpg_n = normalization.normalization(mpg) inputs_all_n = normalization.normalization(inputs_all) inputs_all_test_n = normalization.normalization(inputs_all_test) #線形重回帰の実行 w_all = Linear_multiple_regression.Linear_multiple_regression( inputs_all_n, mpg_n) #決定係数の計算 s_all = np.sum(np.power(mpg_n - np.mean(mpg_n), 2)) s_res = np.sum(np.power(mpg_n - np.dot(inputs_all_n, w_all.T), 2)) R = 1 - (s_res / (len(mpg_n) - 6 - 1)) / (s_all / (len(mpg_n) - 1)) #予測値の計算 mpg_predict = np.dot(inputs_all_test_n, w_all.T) * np.std(mpg) + np.mean(mpg)
import pandas as pd import numpy as np import matplotlib.pyplot as plt from module import Linear_multiple_regression, normalization from mpl_toolkits.mplot3d import Axes3D #データの取得 auto_mpg_data = pd.read_csv("auto-mpg.csv", encoding="utf-8").sample(frac = 1) #配列に変換 mpg = auto_mpg_data.loc[:, "mpg"].values inputs = auto_mpg_data.loc[:, ["horsepower", "weight"]].values #正規化 mpg_n = normalization.normalization(mpg) inputs_n = normalization.normalization(inputs) #線形重回帰の実行 w = Linear_multiple_regression.Linear_multiple_regression(inputs_n, mpg_n) #グラフの描画 fig = plt.figure() ax = Axes3D(fig) ax.set_xlabel("horsepower") ax.set_ylabel("weight") ax.set_zlabel("mpg") mesh_x1 = np.arange(inputs_n[:,0].min(), inputs_n[:,0].max(), (inputs_n[:,0].max()-inputs_n[:,0].min())/20) mesh_x2 = np.arange(inputs_n[:,1].min(), inputs_n[:,1].max(), (inputs_n[:,1].max()-inputs_n[:,1].min())/20)