日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python项目实战-----科比数据集分析

發布時間:2023/12/10 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python项目实战-----科比数据集分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 案例分析

  • 在給定科比職業生涯的相關數據,比如投籃命中率、投籃出手次數等特征進行分析,投出一球是否命中。本質上也為二分類問題,此次選用隨機森林作為模型訓練算法。

數據集及完整代碼地址https://github.com/RenDong3/Python_Note

二 特征工程

1 讀取數據

  • 1.1基本屬性 如head()、tail()、shape、columns
  • 1.2特征聯系
  • loc_x、lox_y表示球場的經緯度 可以理解為位置,所以選用散點圖可以看出整體表現為球場形狀

2 特征工程

2.1 去除無效特征
  • 一般對于ID、time等這些無關緊要的特征可以直接丟棄
  • axis的重點在于方向,而不是行和列
    • 當axis=1時,數組的變化是橫向的,而體現出來的是列的增加或者減少
    • 如果是拼接,那么也是左右橫向拼接;如果是drop,那么也是橫向發生變化,體現為列的減少。
2.2 缺失值處理
  • 丟棄dropna()
    • 對于缺失數據較多的特征可以選擇直接丟棄特征,缺失數據較少的特征可以只丟棄缺失值
  • 填充fillna()
    • 一般選擇特征的未缺失值的均值進行缺失值的填充
2.3 特征組合
  • 如這里可以將小時和分鐘進行結合作為新的特征
2.4 相似特征保一
  • 繪制散點圖描述特征相關性,相關程度較高的特征保留一個即可
  • 如本例中dist特征和shot_distance特征具有很高的正相關,屬于相似特征
2.5 特征類型轉換
  • 字符型轉為數值型
  • one-hot編碼
    • 一個長度為n的數組,只有一個元素是1.0,其他元素是0.0。
  • 自定義字典調用replace
  • 去除特定字符
    • 如’ % ‘、’ - '等特殊連接符號

三 模型訓練

1 隨機森林

1.1 原理
  • 隨機森林由Leo Breiman(2001)提出的一種分類算法,它通過自助法(bootstrap)重采樣技術,從原始訓練樣本集N中有放回地重復隨機抽取n個樣本生成新的訓練樣本集合訓練決策樹,然后按以上步驟生成m棵決策樹組成隨機森林,新數據的分類結果按分類樹投票多少形成的分數而定。其實質是對決策樹算法的一種改進,將多個決策樹合并在一起,每棵樹的建立依賴于獨立抽取的樣本。
  • 單棵樹的分類能力可能很小,但在隨機產生大量的決策樹后,一個測試樣本可以通過每一棵樹的分類結果經統計后選擇最可能的分類。
1.2 流程
  • 從樣本集中有放回隨機采樣選出n個樣本
  • 從所有特征中隨機選擇k個特征,對選出的樣本利用這些特征建立決策樹(一般是CART,也可是別的或混合)
  • 重復以上兩步m次,即生成m棵決策樹,形成隨機森林
  • 對于新數據,經過每棵樹決策,最后投票確認分到哪一類
1.3 優點
  • 每棵樹都選擇部分樣本及部分特征,一定程度避免過擬合
  • 每棵樹隨機選擇樣本并隨機選擇特征,使得具有很好的抗噪能力,性能穩定
  • 能處理很高維度的數據,并且不用做特征選擇
  • 適合并行計算
  • 實現比較簡單
1.4 缺點
  • 參數較復雜
  • 模型訓練和預測都比較慢

2 參數調優

2.1 參數詳解

對于隨機森林存在很多參數,但是用的比較多的一般為下面幾個:

  • n_estimators:
    • 在利用最大投票數或平均值來預測之前,你想要建立子樹的數量。 較多的子樹可以讓模型有更好的性能,但同時讓你的代碼變慢。 你應該選擇盡可能高的值,只要你的處理器能夠承受的住,因為這使你的預測更好更穩定。
  • max_depth:
    • 決策樹最大深度,默認可以不輸入,如果不輸入的話,決策樹在建立子樹的時候不會限制子樹的深度。
    • 一般來說,數據少或者特征少的時候可以不管這個值。如果模型樣本量多,特征也多的情況下,推薦限制這個最大深度,具體的取值取決于數據的分布。
    • 常用的可以取值10-100之間。
  • min_samples_leaf:
    • 葉子節點最少樣本數,這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小于樣本數,則會和兄弟節點一起被剪枝。
    • 默認是1,可以輸入最少的樣本數的整數,或者最少樣本數占樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
  • min_samples_split:
    • 內部節點再劃分所需最小樣本數, 這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少于min_samples_split,則不會繼續再嘗試選擇最優特征來進行劃分。
    • 默認是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
代碼演示
# find the best n_estimators for RandomForestClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.cross_validation import KFoldprint('Finding best n_estimators for RandomForestClassifier...') min_score = 100000 best_n = 0 scores_n = [] range_n = np.logspace(0,2,num=3).astype(int) for n in range_n:print("the number of trees : {0}".format(n))t1 = time.time()rfc_score = 0.rfc = RandomForestClassifier(n_estimators=n)for train_k, test_k in KFold(len(train_kobe), n_folds=10, shuffle=True):rfc.fit(train_kobe.iloc[train_k], train_label.iloc[train_k])#rfc_score += rfc.score(train.iloc[test_k], train_y.iloc[test_k])/10pred = rfc.predict(train_kobe.iloc[test_k])rfc_score += log_loss(train_label.iloc[test_k], pred) / 10scores_n.append(rfc_score)if rfc_score < min_score:min_score = rfc_scorebest_n = nt2 = time.time()print('Done processing {0} trees ({1:.3f}sec)'.format(n, t2-t1)) print(best_n, min_score)# find best max_depth for RandomForestClassifier print('Finding best max_depth for RandomForestClassifier...') min_score = 100000 best_m = 0 scores_m = [] range_m = np.logspace(0,2,num=3).astype(int) for m in range_m:print("the max depth : {0}".format(m))t1 = time.time()rfc_score = 0.rfc = RandomForestClassifier(max_depth=m, n_estimators=best_n)for train_k, test_k in KFold(len(train_kobe), n_folds=10, shuffle=True):rfc.fit(train_kobe.iloc[train_k], train_label.iloc[train_k])#rfc_score += rfc.score(train.iloc[test_k], train_y.iloc[test_k])/10pred = rfc.predict(train_kobe.iloc[test_k])rfc_score += log_loss(train_label.iloc[test_k], pred) / 10scores_m.append(rfc_score)if rfc_score < min_score:min_score = rfc_scorebest_m = mt2 = time.time()print('Done processing {0} trees ({1:.3f}sec)'.format(m, t2-t1)) print(best_m, min_score)

結果:

四 總結

Reference

隨機森林(原理/樣例實現/參數調優)

總結

以上是生活随笔為你收集整理的Python项目实战-----科比数据集分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。