# coding = UTF-8
# ++++++++++++++++++++++++++++++++++++++++++++++++++++
# machine_five_ldmwp.py
# @簡介:用python進(jìn)行機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘
# @作者:Glen
# @日期:2016.8.16
# @資料來源:Python數(shù)據(jù)挖掘入門與實(shí)踐
# +++++++++++++++++++++++++++++++++++++++++++++++++++++
import numpy as np
import pandas as pd
from scipy.stats import pearsonr
from sklearn.feature_selection import VarianceThreshold
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score
from sklearn.base import TransformerMixin
from sklearn.utils import as_float_array
from sklearn.pipeline import Pipeline
# ---------------------------------------
# 用轉(zhuǎn)換器抽取特征
# ----------------------------------------
# 模型就是用來簡化世界期吓,特征抽取也是一樣。
# 降低復(fù)雜性有好處倾芝,但也有不足讨勤,簡化會(huì)忽略很多細(xì)節(jié)。
# 這里的例子用adult數(shù)據(jù)集晨另,預(yù)測一個(gè)人是否年收入多于五萬美元
# 1. 載入數(shù)據(jù)
adult_filename = r'E:\data\bigdata\adult\adult.data'
adult = pd.read_csv(adult_filename, header=None, names=["Age", "Work-Class", "fnlwgt", "Education",
"Education-Num", "Marital-Status", "Occupation",
"Relationship", "Race", "Sex", "Capital-gain",
"Capital-loss", "Hours-per-week", "Native-Country",
"Earnings-Raw"])
# 2. 數(shù)據(jù)清理
# 刪除缺失數(shù)據(jù)
adult.dropna(how='all', inplace=True)
# 3. 探索性數(shù)據(jù)分析
# 描述統(tǒng)計(jì)
print(adult["Hours-per-week"].describe())
print(adult["Work-Class"].unique())
# 3'. 演示scikit-learn特征選擇的方式
X = np.arange(30).reshape((10, 3))
X[:,1] = 1
# 注意:這時(shí)X矩陣中第二列全為1
# 利用VarianceThreshold()來刪除方差低于閾值的變量
vt = VarianceThreshold()
Xt = vt.fit_transform(X)
# 這個(gè)時(shí)候潭千,第二列就被刪除了,因?yàn)樗姆讲顬榱?print(vt.variances_)
# 回到adult的例子借尿,選擇最佳特征
X = adult[["Age", "Education-Num", "Capital-gain", "Capital-loss", "Hours-per-week"]].values
y = (adult["Earnings-Raw"] == ' >50K').values
# 構(gòu)建選擇器
transformer = SelectKBest(score_func=chi2, k=3)
Xt_chi2 = transformer.fit_transform(X, y)
# 結(jié)論:相關(guān)性最好的分別是第一刨晴、三屉来、四列
print(transformer.scores_)
# 還可以利用皮爾遜(Pearson)相關(guān)系數(shù)進(jìn)行選擇
# 這里利用了SciPy庫的pearsonr()函數(shù)
# 定義函數(shù)
def multivariate_pearsonr(X, y):
scores, pvalues = [], []
for column in range(X.shape[1]):
cur_score, cur_p = pearsonr(X[:,column], y)
scores.append(abs(cur_score))
pvalues.append(cur_p)
return (np.array(scores), np.array(pvalues))
transformer = SelectKBest(score_func=multivariate_pearsonr, k=3)
Xt_pearson = transformer.fit_transform(X, y)
print(transformer.scores_)
# 利用CART分類器,查看特征選擇的準(zhǔn)確率
clf = DecisionTreeClassifier(random_state=14)
scores_chi2 = cross_val_score(clf, Xt_chi2, y, scoring='accuracy')
scores_pearson = cross_val_score(clf, Xt_pearson, y, scoring='accuracy')
print("Chi2 performance: {0:.3f}".format(scores_chi2.mean()))
print("Pearson performance: {0:.3f}".format(scores_pearson.mean()))
# 創(chuàng)建自己的轉(zhuǎn)換器
# 轉(zhuǎn)換器的API很簡單狈癞。它接受一種特定格式的數(shù)據(jù)茄靠,輸出一種格式的數(shù)據(jù)。
# 轉(zhuǎn)換器有兩個(gè)關(guān)鍵函數(shù)
# - fit(): 接受訓(xùn)練數(shù)據(jù)蝶桶,設(shè)置內(nèi)部參數(shù)
# - transform(): 轉(zhuǎn)換過程慨绳。接受訓(xùn)練數(shù)據(jù)集或相同格式的新數(shù)據(jù)集。
# 轉(zhuǎn)換器范例
class MeanDiscrete(TransformerMixin):
def fit(self, X, y=None):
X = as_float_array(X)
self.mean = np.mean(X, axis=0)
return self
def transform(self, X):
X = as_float_array(X)
assert X.shape[1] == self.mean.shape[0]
return X > self.mean
pipeline = Pipeline([('mean_discrete', MeanDiscrete()),
('classifier', DecisionTreeClassifier(random_state=14))])
scores_mean_discrete = cross_val_score(pipeline, X, y, scoring='accuracy')
print("Mean Discrete performance: {0:.3f}".format(scores_mean_discrete.mean()))
Python機(jī)器學(xué)習(xí)初步——第二部分
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門拐袜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梢薪,你說我怎么就攤上這事蹬铺。” “怎么了秉撇?”我有些...
- 文/不壞的土叔 我叫張陵甜攀,是天一觀的道長。 經(jīng)常有香客問我琐馆,道長规阀,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任瘦麸,我火速辦了婚禮谁撼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滋饲。我一直安慰自己厉碟,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布屠缭。 她就那樣靜靜地躺著箍鼓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呵曹。 梳的紋絲不亂的頭發(fā)上款咖,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟹肘!你這毒婦竟也來了词疼?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤帘腹,失蹤者是張志新(化名)和其女友劉穎贰盗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳欲,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡舵盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了球化。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秽晚。...
- 正文 年R本政府宣布句伶,位于F島的核電站,受9級特大地震影響陆淀,放射性物質(zhì)發(fā)生泄漏考余。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一轧苫、第九天 我趴在偏房一處隱蔽的房頂上張望楚堤。 院中可真熱鬧,春花似錦含懊、人聲如沸钾军。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽吏恭。三九已至,卻和暖如春重罪,著一層夾襖步出監(jiān)牢的瞬間樱哼,已是汗流浹背哀九。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像茄唐,于是被迫代替她去往敵國和親息裸。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- (五)用一些算法進(jìn)行估計(jì)重點(diǎn)地方到了沪编,機(jī)器學(xué)習(xí)開始發(fā)揮作用了呼盆。這部分包括:1、對數(shù)據(jù)集進(jìn)行分離(分為訓(xùn)練集蚁廓、驗(yàn)證集...
- 一面放大鏡放大孩子的思考访圃,主題圖選取拼角思考的內(nèi)容與課程內(nèi)容相關(guān)。結(jié)構(gòu)的呈現(xiàn)自己的思考相嵌,每次畫圖帶來內(nèi)心的平靜腿时,讓...
- 讓心靜下來,戰(zhàn)勝一切憂慮 我們都是由于不能實(shí)現(xiàn)既定的目標(biāo)而無法控制自己饭宾, 總是局限在一個(gè)令人難以忍受的小圈子里批糟, ...