91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python數據挖掘中比較實用的幾個特征選擇方法

發布時間:2021-09-10 11:23:06 來源:億速云 閱讀:175 作者:chen 欄目:大數據

這篇文章主要介紹“python數據挖掘中比較實用的幾個特征選擇方法”,在日常操作中,相信很多人在python數據挖掘中比較實用的幾個特征選擇方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python數據挖掘中比較實用的幾個特征選擇方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

對于從事數據分析、數據挖掘的小伙伴來說,特征選擇是繞不開的話題,是數據挖掘過程中不可或缺的環節。好的特征選擇能夠提升模型的性能,更能幫助我們理解數據的特點、底層結構,這對進一步改善模型、算法都有著重要作用。

特征選擇作用

  • 減少特征數量、降維,使模型泛化能力更強,減少過擬合

  • 增強對特征和特征值之間的理解

特征選擇方法介紹

1.特征重要性

在特征的選擇過程中,學習器是樹模型的話,可以根據特征的重要性來篩選有效的特征,在sklearn中,GBDT和RF的特征重要性計算方法是相同的,都是基于單棵樹計算每個特征的重要性,探究每個特征在每棵樹上做了多少的貢獻,再取個平均值。單棵樹上特征的重要性定義為:特征在所有非葉節在分裂時加權不純度的減少,減少的越多說明特征越重要

import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.externals.six import StringIOfrom sklearn import treeimport pydotplusclf = DecisionTreeClassifier()x = [[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],     [1,1,2,2,1,1,1,2,1,1,1,1,2,2,1],     [1,1,1,2,1,1,1,2,2,2,2,2,1,1,1],     [1,2,2,1,1,1,2,2,3,3,3,2,2,3,1]     ]y =  [1,1,2,2,1,1,1,2,2,2,2,2,2,2,1]x = np.array(x)x = np.transpose(x)clf.fit(x,y)print(clf.feature_importances_)feature_name = ['A1','A2','A3','A4']target_name = ['1','2']dot_data = StringIO()tree.export_graphviz(clf,out_file = dot_data,feature_names=feature_name,                     class_names=target_name,filled=True,rounded=True,                     special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("Tree.pdf")

2.回歸模型的系數

越是重要的特征在模型中對應的系數就會越大,而跟輸出變量越是無關的特征對應的系數就會越接近于0。在噪音不多的數據上,或者是數據量遠遠大于特征數的數據上,如果特征之間相對來說是比較獨立的,那么即便是運用最簡單的線性回歸模型也一樣能取得非常好的效果。

from sklearn.linear_model import LinearRegressionimport numpy as npnp.random.seed(0)size = 5000#A dataset with 3 featuresX = np.random.normal(0, 1, (size, 3))#Y = X0 + 2*X1 + noiseY = X[:,0] + 2*X[:,1] + np.random.normal(0, 2, size)lr = LinearRegression()lr.fit(X, Y)#A helper method for pretty-printing linear modelsdef pretty_print_linear(coefs, names = None, sort = False):    if names == None:        names = ["X%s" % x for x in range(len(coefs))]    lst = zip(coefs, names)    if sort:        lst = sorted(lst,  key = lambda x:-np.abs(x[0]))    return " + ".join("%s * %s" % (round(coef, 3), name)                                   for coef, name in lst)
print "Linear model:", pretty_print_linear(lr.coef_)

3.平均精確率減少

平均精確率減少就是直接度量每個特征對模型精確率的影響。主要思路是打亂每個特征的特征值順序,并且度量順序變動對模型的精確率的影響。很明顯,對于不重要的變量來說,打亂順序對模型的精確率影響不會太大,但是對于重要的變量來說,打亂順序就會降低模型的精確率。這個方法sklearn中沒有直接提供,但是很容易實現

from sklearn.cross_validation import ShuffleSplitfrom sklearn.metrics import r2_scorefrom collections import defaultdict
X = boston["data"]Y = boston["target"]
rf = RandomForestRegressor()scores = defaultdict(list)
#crossvalidate the scores on a number of different random splits of the datafor train_idx, test_idx in ShuffleSplit(len(X), 100, .3):    X_train, X_test = X[train_idx], X[test_idx]    Y_train, Y_test = Y[train_idx], Y[test_idx]    r = rf.fit(X_train, Y_train)    acc = r2_score(Y_test, rf.predict(X_test))    for i in range(X.shape[1]):        X_t = X_test.copy()        np.random.shuffle(X_t[:, i])        shuff_acc = r2_score(Y_test, rf.predict(X_t))        scores[names[i]].append((acc-shuff_acc)/acc)print "Features sorted by their score:"print sorted([(round(np.mean(score), 4), feat) for              feat, score in scores.items()], reverse=True)

到此,關于“python數據挖掘中比較實用的幾個特征選擇方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚东县| 汾西县| 闵行区| 虹口区| 长顺县| 蒙自县| 石泉县| 米林县| 扶绥县| 宁波市| 德惠市| 邢台市| 叙永县| 鸡东县| 珠海市| 灵璧县| 孟村| 余江县| 普定县| 荆州市| 酒泉市| 斗六市| 乾安县| 诏安县| 石门县| 泌阳县| 米易县| 墨脱县| 中方县| 商水县| 江山市| 铁力市| 金川县| 永兴县| 融水| 青海省| 唐河县| 邳州市| 昂仁县| 漠河县| 巴塘县|