Machine_learning_using_sklearn

まえがき 前の記事で、pandasをつかってデータフレームを扱う基礎を学んだね。 めちゃめちゃ便利だということがわかったと思うが、pandasを使ってデータを整形して、最終的に何がしたいかというと、データの分析がしたいんだよね。なぜ分析したいかというと、データから何かしらの情報を得てそれを今後に役立てたいから。 今後への役立て方の一つに予測があるわけだね。そう、回帰だ。深層学習も回帰だよね。深層学習をやるにはTensorFlowっていうライブラリがめっちゃ便利だが、統計的機械学習をやるには、sklearnがある。ということでsklearnを使って統計的機械学習をやっていこう! の前に、pandas + sklernをGPUでバク速でやってくれるのがrapidsっていうフレームワークだったよね!実際に大量のデータを使って運用するときは予測にも時間をかけていられないと思うので、GPUを使った運用を考えたほうがいいですね。というか、一回現場で働いてみて、そのあと博士課程で戻ってくるのは全然ありだな。楽しそう。そっちのほうが実際の問題がわかるので有用だと思います。 はい、そのまま載せます。ちなみに、standard deviationは標準偏差です。 1. preperocessing # 5.1.1 game_sales = pd.read_csv('sales.csv', encoding='CP932').dropna() na_sales_0_to_3 = game_sales["NA_Sales"].between(0.01,3) game_sales = game_sales[na_sales_0_to_3] na_sales_reshape = game_sales["NA_Sales"].values.reshape(-1,1) from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(na_sales_reshape) na_sales_scaled = scaler.transform(na_sales_reshape) game_sales["NA_Sales_Std"] = pd.Series(na_sales_scaled.flatten()) print(game_sales["NA_Sales_Std"].head(10), end='\n\n') # 5.1.2 old_mean_std = game_sales['NA_Sales'].agg(["mean","std"]).round(2) new_mean_std = game_sales['NA_Sales_Std'].agg(["mean","std"]).round(2) print(old_mean_std, end='\n\n') print(new_mean_std, end='\n\n') # 5.1.3 fig, axes = plt.subplots(2,1,figsize=(8,6)) sns.boxplot(data=game_sales, x='NA_Sales', ax=axes[0]) sns.boxplot(data=game_sales, x='NA_Sales_Std', ax=axes[1]) plt.show() linear regression # 5.2.1 game_sales = pd.read_csv('sales.csv', encoding='CP932').dropna() col_list = ['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales', 'Critic_Count', 'User_Score', 'Critic_Score'] from sklearn.preprocessing import scale X = scale(game_sales[col_list].values) y = scale(game_sales['User_Count'].values) from sklearn.linear_model import LinearRegression reg_model = LinearRegression() reg_model.fit(X,y) # 5.2.2 reg_coef = reg_model.coef_ report = [f'{a}\t: {b}' for a, b in zip(col_list, reg_coef)] for info in report: print(info) print(f'Regression Score :{reg_model.score(X,y)}') # 5.2.3 fig = sns.regplot(x='User_Count', y='Global_Sales', data=game_sales) fig.set(xlim=(100, 4000), ylim=(2, 20)) plt.show() Logistic Regression ロジスティック回帰分析は、いくつかの要因(説明変数)から「2値の結果(目的変数)」が起こる確率を説明・予測することができる統計手法です。 らしいです。はい、2値しか予測できない、というところがめちゃめちゃポイントですね。しっかりと頭に入れておきましょう。 ...

May 24, 2023 · 1 min · 201 words · Me

Learn_pd_and_dataframe

学校のデータ分析の授業でやっとpandasやdataframeの基礎を学んだのでまとめてきたいと思う。これでkaggleもできるようになると思うよ!! chapter 1 importing import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import sklearn as sl reading csv salary = pd.read_csv('salary.csv') dataframe meta operation # print first 5 rows df.head() # print first n rows df.head(n) # print shape print(df.shape) # print columns print(df.columns) # print info print(df.info()) converting dataframe to list or numpy # convert dataframe's columns to string list string_list = df.columns.values getting specific column game_name = df['game_name'] getting dummiy of specific column (prefix is optional) dummy_column = pd.get_dummies(df['specific_row'],prefix='pref') slice specific row and column # get slice of rows from 100 to 199 slieced = df.iloc[100:200,:] # get specific columns all_scores = ['Critic_Score', 'User_Score'] reg_sales_df = game_sales[all_scores] # get specific clumns like specified all_sales = game_sales.filter(like='Sales') # get specific rows and columns sample_info = eng_salary.loc[:11244,['Degree', 'Specialization', 'Salary']] chapter 2 (Filtering) filter by condition # get rows where Year_of_Release is 2016 filter = game_sales['Year_of_Release'] == 2016 year_of_2016 = game_sales[filter] # get rows which satisifes the multiple condition and print specific columns pub_is_Nintendo = game_sales['Publisher'] == 'Nintendo' year_is_85_to_95 = (game_sales['Year_of_Release'] >= 1985) &\ (game_sales['Year_of_Release'] <= 1995) Nintendo_85_to_95 = game_sales[year_is_85_to_95 & pub_is_Nintendo] print(Nintendo_85_to_95[['Name', 'Publisher', 'Year_of_Release']], end='\n\n') # same as above but in one line. sp_omit = 'information technology' cond1 = eng_salary['Specialization'] != sp_omit cond2 = eng_salary['English'] <= 400 cond = cond1 & cond2 output = eng_salary.loc[cond,['Specialization','English']] grouping (IMPORTANT) まずはgroupingがどんなことをするのかだけど、ある列について、同じものをまとめるって感じだな。そして、その列についてまあ、色々と操作をするわけです。例えば各出版社ごとの売上とかもかんたんに計算できるようになるってことです。これはクッソ便利ですよね??はい、マジで便利なんです。 ...

May 24, 2023 · 4 min · 829 words · Me