中國建設(shè)銀行官方網(wǎng)站首頁全網(wǎng)推廣的方式有哪些
文章目錄
- 環(huán)境配置(必看)
- 頭文件引用
- 1.樸素貝葉斯算法
- 代碼
- 運行結(jié)果
- 優(yōu)缺點
- 2.決策樹
- 代碼
- 運行結(jié)果
- 決策樹可視化圖片
- 優(yōu)缺點
- 3.隨機森林
- 代碼
- RandomForestClassifier()
- 運行結(jié)果
- 總結(jié)
- 本章學(xué)習(xí)資源
環(huán)境配置(必看)
Anaconda-創(chuàng)建虛擬環(huán)境的手把手教程相關(guān)環(huán)境配置看此篇文章,本專欄深度學(xué)習(xí)相關(guān)的版本和配置,均按照此篇文章進行安裝。
頭文件引用
from sklearn.datasets import load_iris, fetch_20newsgroups
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction import DictVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
import pandas as pd
1.樸素貝葉斯算法
查看存放數(shù)據(jù)集的路徑(手動下載數(shù)據(jù)集存放在這個路徑下)
print(sklearn.datasets.get_data_home())
參考這篇文章進行的數(shù)據(jù)集的適配–
sklearn的英文20新聞數(shù)據(jù)集fetch_20newsgroups在MAC電腦上的加載
我的電腦是win10,最終修改的路徑為:
archive_path = 'C:/Users/asus/scikit_learn_data/20news_home/20news-bydate.tar.gz'
代碼
調(diào)參:
MultinomialNB()默認(rèn)的alpha=1,但是準(zhǔn)確率只有84%,設(shè)置為alpha=0.01,準(zhǔn)確率有很大提高
def nb_news():"""用樸素貝葉斯算法對新聞進行分類:return:"""# 1)獲取數(shù)據(jù)# subset參數(shù) 默認(rèn)是獲取訓(xùn)練集,如果訓(xùn)練集和目標(biāo)集都要就是subset='all'news = fetch_20newsgroups(subset='all')# 2)劃分?jǐn)?shù)據(jù)集 random_state=10x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)# 3)特征工程:文本特征抽取transfer = TfidfVectorizer()# 抽取訓(xùn)練集和測試集的特征值x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4)樸素貝葉斯算法算法預(yù)估器流程estimator = MultinomialNB(alpha=0.01)estimator.fit(x_train, y_train)# 5.模型評估# 方法1: 直接比對真實值和預(yù)測值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比對真實值和預(yù)測值: {y_test == y_predict}")# 方法2: 計算準(zhǔn)確率score = estimator.score(x_test, y_test)print(f"準(zhǔn)確率為: {score}")
運行結(jié)果
優(yōu)缺點
優(yōu)點:對缺失數(shù)據(jù)不太敏感,算法也比較簡單,常用于文本分類。分類準(zhǔn)確度高,速度快
缺點:由于使用了樣本屬性獨立性的假設(shè),所以如果特征屬性有關(guān)聯(lián)時其效果不好
2.決策樹
代碼
def decision_iris():"""用決策樹對鳶尾花進行分類:return:"""# 1.獲取數(shù)據(jù)集iris = load_iris()# 2.劃分?jǐn)?shù)據(jù)集x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)# 3.決策樹預(yù)估器estimator = DecisionTreeClassifier()estimator.fit(x_train, y_train)# 4.模型評估# 方法1: 直接比對真實值和預(yù)測值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比對真實值和預(yù)測值: {y_test == y_predict}")# 方法2: 計算準(zhǔn)確率score = estimator.score(x_test, y_test)print(f"準(zhǔn)確率為: {score}")# 可視化決策樹 feature_names=iris.feature_names 傳輸特征名字顯示在結(jié)構(gòu)圖中plot_tree(estimator, feature_names=iris.feature_names)# 保存決策樹可視化結(jié)構(gòu)圖片plt.savefig("tree_struct.png")# 顯示圖像plt.show()
運行結(jié)果
決策樹可視化圖片
petal_width(cm): 花瓣寬度
entropy: 信息增益
samples:樣本 (第一個框:150*0.75≈112)
value:每個類別中有多少個符合條件的元素
優(yōu)缺點
優(yōu)點:簡單的理解和解釋,樹木可視化。
缺點:決策樹學(xué)習(xí)者可以創(chuàng)建不能很好地推廣數(shù)據(jù)的過于復(fù)雜的樹,容易發(fā)生過擬合。
改進:減枝cart算法隨機森林(集成學(xué)習(xí)的一種)
注:企業(yè)重要決策,由于決策樹很好的分析能力,在決策過程應(yīng)用較多, 可以選擇特征
3.隨機森林
代碼
def random_forest():"""隨機森林對泰坦尼克號乘客的生存進行預(yù)測:return:"""# 1.獲取數(shù)據(jù)集titanic = pd.read_csv("titanic.csv")# 篩選特征值和目標(biāo)值x = titanic[["pclass", "age", "sex"]]y = titanic["survived"]# 2.數(shù)據(jù)處理# 1) 缺失值處理x["age"].fillna(x["age"].mean(), inplace=True)# 2) 轉(zhuǎn)換成字典x = x.to_dict(orient="records")# 3.劃分?jǐn)?shù)據(jù)集 random_state=10x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)# 4.字典特征抽取transfer = DictVectorizer()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 5.算法預(yù)估器estimator = RandomForestClassifier()# 加入網(wǎng)格搜索和交叉驗證# 參數(shù)準(zhǔn)備 "max_depth" 最大深度param_dict = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]} # 網(wǎng)格搜索# cv=10 代表10折運算(交叉驗證)estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)estimator.fit(x_train, y_train)# 6.模型評估# 方法1: 直接比對真實值和預(yù)測值y_predict = estimator.predict(x_test)print(f"y_predict:\n{y_predict}")print(f"直接比對真實值和預(yù)測值: {y_test == y_predict}")# 方法2: 計算準(zhǔn)確率score = estimator.score(x_test, y_test)print(f"準(zhǔn)確率為: {score}")# 最佳參數(shù):print("最佳參數(shù): \n", estimator.best_params_)# 最佳結(jié)果:print("最佳結(jié)果: \n", estimator.best_score_)# 最佳參數(shù):print("最佳估計器: \n", estimator.best_estimator_)# 交叉驗證結(jié)果:print("交叉驗證結(jié)果: \n", estimator.cv_results_)
RandomForestClassifier()
運行結(jié)果
總結(jié)
能夠有效地運行在大數(shù)據(jù)集上,
處理具有高維特征的輸入樣本,而且不需要降維
本章學(xué)習(xí)資源
黑馬程序員3天快速入門python機器學(xué)習(xí)我是跟著視頻進行的學(xué)習(xí),歡迎大家一起來學(xué)習(xí)!