機械学習三剣客

20984 ワード

機械学習三剣客
最近,推奨システムを最適化する準備ができており,sparkのmllibのコードを学習する際にnumpyを用いるパラメータが多いことが分かった.そこでこのブログがあり、pythonの機械学習を詳しく説明した三剣客は、私の後ろにもデータをグラフの形で展示したいと思っていました.これでイメージがよくなりました.
numpy
Numpyはpython言語の拡張ライブラリです.高度な大量の次元配列とマトリクス演算をサポートし、また配列演算に対して大量の数学関数ライブラリを提供します.Numpy内部はpythonのGILを解除し、演算効率が極めて良く、大量の機械学習フレームワークの基礎ライブラリである
Numpy単純配列作成
import  numpy as np

a=[1,2,3,4]
b=np.array(b)

numpy配列プロパティの表示
  • 配列要素の数を表示するb.size
  • 配列形状b.shape
  • を表示する.
  • 配列次元b.ndim
  • を表示
  • 配列要素タイプb.dtype
  • を表示
    N次元配列のapi関数の迅速な作成
  • 10行10列の数値浮動小数点1の行列array_one=np.ones([10,10])
  • を作成する.
  • 10行10列の数値浮動小数点0の行列array_zero=np.zeros([10,10])
  • を作成する.
    numpyはランダム配列npを作成する.random
  • 均一分布
  • np.random.rand(10,10)指定形状
  • を作成する
  • np.random.uniform(0100)指定範囲内の数
  • を作成
  • np.random.randin(0100)指定方位内の整数
  • を作成する
  • 正規分布
  • 所与の平均/標準差/次元の正規分布np.random.normal(1.75,0.1,(2,3))
  • 配列のインデックス、スライス
  • arr=np.random.normal(1.75,0.1,(4,5))
    print arr
    after_arr=arr[1:3,2:4]
    print after_arr
  • 配列形状を変更する(前後要素の個数マッチングが要求される)
  • one_20=np.ones([20])
    print one_20
    
    one_4_5=one_20.reshape([4,5])
    print one_4_5

    numpy計算(重要)
    stus_score=np.array([[80,88],[82,81],[84,75],[86,83],[75,81]])
    stus_score>80
    np.where(stus_score<80,0,90)

    統計演算
  • 指定軸最大値amax(パラメータ1:配列;パラメータ2:axis=0/1;0は列1が行を表す)
  • print np.amax(stus_score,axis=0)
    print result
    
    print np.amax(stus_score,axis=1)
    print result
  • 指定軸最小値amin
  • result=np.amin(stus_score,axis=0)
    print result
    result=np.amin(stus_score,axis=1)
    print result
  • 指定軸平均mean
  • result=np.mean(stus_score,axis=0)
    print result
    result=np.mean(stus_score,axis=1)
    print result
  • 分散std
  • result=np.std(stus_score,axis=0)
    print result
    result=np.std(stus_score,axis=1)
    

    はいれつえんざん
    配列と数の演算
    stus_score[:,0]=stus_score[:,0]+5
    print stus_score
    
    stus_score[:,0]=stus_score[:,0]*5
    print stus_score
    

    マトリックス演算np.dot()
    計算ルール
    (M行、N列)*(N行、Z列)=(M行、Z列)
    q = np.array([[0.4], [0.6]])
    result = np.dot(stut_score, q)
    print result

    マトリックスせつごう
    マトリックス垂直接合
    v1 = [[0, 1, 2, 3, 4, 5],
          [6, 7, 8, 9, 10, 11]]
    v2 = [[12, 13, 14, 15, 16, 17], 
          [18, 19, 20, 21, 22, 23]]
    
    result=np.vstack((v1,v2))
    print result            
    v1 = [[0, 1, 2, 3, 4, 5],
          [6, 7, 8, 9, 10, 11]]
    v2 = [[12, 13, 14, 15, 16, 17], 
          [18, 19, 20, 21, 22, 23]]
    
    result=np.hstack((v1,v2))
    print result  

    numpyは、データnpを読み出す.getfromtxt
    result=np.getfromtxt(“./students_score.csv”,delimiter=“,”)

    pandas
    pandasはnumpyに基づいて開発され、データ分析に特化したオープンソースpythonライブラリです.
    Pandasの2大コアデータ構造
    Series(1 Dデータ)
    import numpy as np
    import pandas as pd
    
    print pd.Series(np.arange(4,10))
    
    pd.Series([11,12,14],index=[“  ”,”  ”,”  ”])
    
    pd.Series({“  ”:11,”  ”:12,”  ”:14})

    DataFrame(マルチフィーチャーデータ、ローインデックス、カラムインデックス)
    data_3_4=pd.DataFrame(np.arange(10,22).reshape(3,4))
    print data_3_4
    print(data_3_4[:1])
    print(data_3_4[:][0])
    #     3 4  DataFrame    
    data_3_4 = pd.DataFrame(np.arange(10, 22).reshape(3, 4))
    #     
    print(data_3_4)
    
    #        
    print(data_3_4[:1])
    #        
    print(data_3_4[:][0])
    
    #     
    result = pd.read_csv("./students_score.csv")
    #      
    result.shape
    #           
    result.dtypes
    #      
    result.ndim
    #      ( / /  )
    result.index
    #            
    result.columns
    #           
    result.values
    
    print("--> 5 :")
    print(result.head(5))
    #    5 
    print("--> 5 :")
    print(result.tail(5))
    #       (     )
    print("-->    :")
    print(result.describe())
    

    pandaデータ読み出し(csvを例に)
    pandas.read_csv(filepath,sep=“,”,names=None,usecols=None)
    
         :DataFrame
    result[‘  ’][0:6]
    result[result[‘age’]>23]
    IMDB_1000 = pd.read_csv("./IMDB-Movie-Data.csv")
    #       
    print(IMDB_1000.dtypes)
    #   1000           ,  ascending,    True(  ),    False(  )
    IMDB_1000.sort_values(by="Rating", ascending=False)
    #        
    IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].max()]
    #        
    IMDB_1000[IMDB_1000["Runtime (Minutes)"]==IMDB_1000["Runtime (Minutes)"].min()]
    #        
    IMDB_1000["Runtime (Minutes)"].mean()
    
    #           
    IMDB_1000.dropna()
    
    #                 
    IMDB_1000["Revenue (Millions)"].fillna(IMDB_1000["Revenue (Millions)"].mean(), inplace=True)
    #       ,       ,           
    bcw = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=["Sample code number","Clump Thickness","Uniformity of Cell Size","Uniformity of Cell Shape", "Marginal Adhesion","Single Epithelial Cell Size","Bare Nuclei","Bland Chromatin","Normal Nucleoli","Mitoses","Class:"])
    
    #   ,     ?   np.nan
    bcw=bcw.replace(to_replace=“?”,value=np.nan)
    #    10   
    train = pd.read_csv("./train.csv", nrows = 10)
    #      time          (s)     
    train["time"] = pd.to_datetime(train["time"], unit="s")
    
    #    year, month, weekday
    train["year"] = pd.DatetimeIndex(train["time"]).year
    train["month"] = pd.DatetimeIndex(train["time"]).month
    train["weekday"] = pd.DatetimeIndex(train["time"]).weekday
    

    データテーブルのマージ
    #   3  
    user_info = pd.read_csv("./user_info.csv")
    order_info = pd.read_csv("./order_info.csv")
    goods_info = pd.read_csv("./goods_info.csv")
    #      
    u_o = pd.merge(user_info, order_info, how="left", on=["user_id", "user_id"])
    u_o_g = pd.merge(u_o, goods_info, how="left", on=["goods_name", "goods_name"])
    #    ,        ,         
    user_goods = pd.crosstab(u_o_g["  "],u_o_g["goods_name"])

    データテーブルのグループ化
    starbucks = pd.read_csv("./directory.csv")
    #             
    starbucks.groupby(["Country"]).count()
    #                   
    starbucks.groupby(["Country", "State/Province"]).count()

    matplotlib
    matplotlibはpython 2 Dグラフィックス分野の基礎キットであり、ユーザーがデータをグラフィックス化し、多様な出力フォーマットを提供する.ここではmatplotlibの一般的な使い方を4つのケースで探求します
    折れ線グラフを描く
    import matplotlib.pyplot as plt
    import random
    
    # plt.plot([1, 2, 3, 4])
    # plt.ylabel("some numbers")
    # plt.show()
    #
    # plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
    # plt.show()
    
    beijing_x = [_ for _ in range(0, 24)]
    beijing_y = [random.randint(10, 30) for _ in range(0, 24)]
    
    plt.plot(beijing_x, beijing_y, label="beijing")
    
    shanghai_x = [_ for _ in range(0, 24)]
    shanghai_y = [random.randint(10, 20) for _ in range(0, 24)]
    
    plt.plot(shanghai_x, shanghai_y, label="shanghai")
    
    hefei_x = [_ for _ in range(0, 24)]
    hefei_y = [random.randint(30, 40) for _ in range(0, 24)]
    
    plt.plot(hefei_x, hefei_y, label="hefei", color="#823384", linestyle=":", linewidth=3, alpha=0.3)
    
    ##   
    
    x_ = [x_ for x_ in range(24)]
    x_desc = ["{}h".format(_) for _ in x_]
    
    plt.xticks(x_, x_desc)
    
    y_ = [_ for _ in range(50)][::2]
    y_desc = ["{}c".format(_) for _ in y_]
    
    plt.yticks(y_, y_desc)
    
    plt.xlabel("time")
    plt.ylabel("temperature")
    
    plt.title("the temperature change in one day")
    
    plt.legend(loc="best")
    
    plt.show()
    
    import matplotlib.pyplot as plt
    import random
    from pylab import mpl
    
    mpl.rcParams['font.sans-serif'] = ['FangSong']  #       
    mpl.rcParams['axes.unicode_minus'] = False  #          '-'        
    
    #                 
    role_list = ["michael", "sdsds", "sdasd", "ffff", "gggg", "bbb", "nnn", "lll"]
    role_age = [7, 17, 7, 34, 32, 30, 27, 46]
    #     
    role_ture_age = [18, 17, 18, 34, 45, 30, 27, 46]
    
    x = [i + 1 for i, role in enumerate(role_list)]
    
    y = role_age
    y2 = role_ture_age
    
    plt.figure(figsize=(15, 8), dpi=100)
    
    plt.bar(x, y, width=-0.4, label="role age", color="#509839")
    plt.bar(x, y2, width=0.3, label="role real age", color="#c03035")
    
    x_desc = [_ for _ in role_list]
    
    plt.xticks(x, x_desc)
    
    y = range(50)[::5]
    
    plt.yticks(y)
    
    plt.xlabel("role")
    plt.ylabel("age")
    plt.title("the role in cartoon Detective conan")
    plt.legend(loc="best")
    
    plt.show()