《机器学习及实践-----从零开始通往kaggle竞赛之路》学习笔记

机器学习→监督学习+无监督学习

监督学习→分类+回归(连续)

无监督学习→降维+聚类

分类→二分类+多类分类+多标签分类(判断一个样本是否同时属于多个不同类别)

分类:

逻辑斯特回归:from sklearn.linear_model import LogisticRegression

随机梯度参数估计:from sklearn.linear_model import SGDClassifier

支持向量机:from sklearn.svm import LinearSVC

朴素贝叶斯:from sklearn.naive_bayes import MultinomialNB

K近邻:from sklearn.neighbors import KNeighborsClassifier

决策树:from sklearn.tree import DecisionTreeClassifier

随机森林:from sklearn.ensemble import RandomForestClassifier

梯度提升决策树:from sklearn.ensemble import GradientBoostingClassifier

分类评价标准:

准确性:model.score

精确度、召回率、F1:from sklearn.metrics import classificationa_report

准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?


 

回归预测:

线性回归:from sklearn.linear_model import LinearRegression

随机梯度回归:from sklearn.linear_model import SGDRegressor

多项式回归:from sklearn.preprocessing import PolynomialFeatures(仍使用线性模型)

支持向量机:from sklearn.svm import SVR(ps.linear、poly、rbf)

K近邻:from sklearn.neighbors import KNeighborsRegressor

回归树:from sklearn.tree import DecisionTreeRegressor

随机森林:from sklearn.ensemble import RandomForestRegressor

极端森林:from sklearn.ensemble import ExtraTreeRegressor(贡献度)

梯度提升回归树:from sklearn.ensemble import GradientBoostingRegressor

回归评价标准:

R-squared(R2)、MAE(平均绝对误差)、MSE(均方误差)

from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error


数据聚类和降维:

K均值聚类:from sklearn.cluster import KMeans

PCA:from sklearn.decomposition import PCA


特征提升:

特征抽取:from sklearn.feature_extraction import DictVectorizer

文本处理:1)from sklearn.feature_extraction.text import CountVectorizer(统计词频)

2) from sklearn.feature_extraction.text import TfidfVectorizer(统计词频和文本条数倒数)

特征筛选:from sklearn import feature_selection(调用SelectPercentile方法)

交叉验证:from sklearn.cross_validation import cross_val_score

模型正则化:

L1正则化:为了使目标最小化,L1正则化方法会使参数向量中很多元素趋向于0,使得大部分特征失去对优化目标的贡献。让有效特征变的稀疏。Lasso

from sklearn.linear_model import Lasso

L2正则化:为了使目标最小化,L2正则化方法会使参数向量中大部分元素都变得很小,压制了参数之间的差异性。Ridge

from sklearn.linear_model import Ridge

模型检验:留一验证、交叉验证

超参数搜索:

网格搜索:from sklearn.grid_search import GridSearchCV(ps.并行搜索时,设置n_jobs=-1)


 

自然语言处理包(NLTK):import nltk

一、良/恶性肿瘤预测

读取pd.read_csv(‘  ’)

构建正负分类样本negative = df_test.loc[df_test['Type'] == 0][['Clump Thickness', 'Cell Size']]

画图包import matplotlib.pyplot as plt

plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red')

逻辑斯特回归from sklearn.linear_model import LogisticRegression

训练拟合lr.fit()

截距intercept = lr.intercept_

coef = lr.coef_[0, :]

ly = (-intercept - lx * coef[0]) / coef[1]

plt.plot(lx, ly, c='blue')

plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red')

plt.xlabel('Clump Thickness')

plt.ylabel('Cell Size')

plt.show()

二、监督学习任务:分类学习、回归预测

1、分类

逻辑斯蒂函数(Logistic)映射到(0,1)

(1)线性分类模型从事良/恶性肿瘤预测任务的性能分析

数据集读取

#创建特征列表。

column_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']

#使用pandas.read_csv函数从互联网读取指定数据。

Data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names = column_names )

数据预处理,填充缺失值

#将?替换为标准缺失值表示。

data = data.replace(to_replace='?', value=np.nan)

#丢弃带有缺失值的数据(只要有一个维度有缺失)。

data = data.dropna(how='any')

#使用sklearn.cross_valiation里的train_test_split模块用于分割数据。

from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.25, random_state=33)

#sklearn.preprocessing里导入StandardScaler

标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。

from sklearn.preprocessing import StandardScaler

#从sklearn.linear_model里导入LogisticRegression与SGDClassifier。(逻辑斯特回归和随机梯度参数)

from sklearn.linear_model import LogisticRegression

from sklearn.linear_model import SGDClassifier

评价分类的4个指标(准确率、召回率、精确率、F1指标)详情见p42

from sklearn.metrics import classification_report

print 'Accuracy of LR Classifier:',lr.score(X_test, y_test)

#利用classification_report模块获得LogisticRegression其他三个指标的结果。

print classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant'])

(2)支持向量机(分类)

from sklearn.datasets import load_digits数据集:手写体数字图像

#sklearn.svm里导入基于线性假设的支持向量机分类器LinearSVC

from sklearn.svm import LinearSVC

(3)朴素贝叶斯

#从sklearn.datasets里导入新闻数据抓取器fetch_20newsgroups。

from sklearn.datasets import fetch_20newsgroups

#与之前预存的数据不同,fetch_20newsgroups需要即时从互联网下载数据。

news = fetch_20newsgroups(subset='all')

#sklearn.feature_extraction.text里导入用于文本特征向量转化模块。详细介绍请读者参考3.1.1.1特征抽取一节。(文本数据特征提取)

from sklearn.feature_extraction.text import CountVectorizer

vec = CountVectorizer()

X_train = vec.fit_transform(X_train)

X_test = vec.transform(X_test)

#sklearn.naive_bayes里导入朴素贝叶斯模型。

from sklearn.naive_bayes import MultinomialNB

(4)K近邻(分类)

#从sklearn.datasets导入 iris数据加载器。

from sklearn.datasets import load_iris

#sklearn.neighbors里选择导入KNeighborsClassifier,即K近邻分类器。

from sklearn.neighbors import KNeighborsClassifier

(5)决策树

#利用pandas的read_csv模块直接从互联网收集泰坦尼克号乘客数据。

titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

#机器学习有一个不太被初学者重视,并且耗时,但是十分重要的一环,特征的选择,这个需要基于一些背景知识。根据我们对这场事故的了解,sex, age, pclass这些都很有可能是决定幸免与否的关键因素。

X = titanic[['pclass', 'age', 'sex']]

y = titanic['survived']

#首先我们补充age里的数据,使用平均数或者中位数都是对模型偏离造成最小影响的策略。

X['age'].fillna(X['age'].mean(), inplace=True)

#我们使用scikit-learn.feature_extraction中的特征转换器,详见3.1.1.1特征抽取。

from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)

#转换特征后,我们发现凡是类别型的特征都单独剥离出来,独成一列特征,数值型的则保持不变。

X_train = vec.fit_transform(X_train.to_dict(orient='record'))

#同样需要对测试数据的特征进行转换。

X_test = vec.transform(X_test.to_dict(orient='record'))

#从sklearn.tree中导入决策树分类器。

from sklearn.tree import DecisionTreeClassifier

(6)集成模型(仍使用titanic

#使用随机森林分类器进行集成模型的训练以及预测分析。

from sklearn.ensemble import RandomForestClassifier

#使用梯度提升决策树进行集成模型的训练以及预测分析。

from sklearn.ensemble import GradientBoostingClassifier

2、回归预测

(1)线性回归器(boston数据集)

#从sklearn.datasets导入波士顿房价数据读取器。

from sklearn.datasets import load_boston

#从sklearn.linear_model导入LinearRegression

from sklearn.linear_model import LinearRegression

#从sklearn.linear_model导入SGDRegressor

from sklearn.linear_model import SGDRegressor

#sklearn.metrics依次导入r2_scoremean_squared_error以及mean_absoluate_error用于回归性能的评估。

#使用LinearRegression模型自带的评估模块,并输出评估结果。

print 'The value of default measurement of LinearRegression is', lr.score(X_test, y_test)

from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error

#使用r2_score模块,并输出评估结果。

以上两个相同

print 'The value of R-squared of LinearRegression is', r2_score(y_test, lr_y_predict)

#使用mean_squared_error模块,并输出评估结果。(均方误差)

 mean_squared_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(lr_y_predict))

#使用mean_absolute_error模块,并输出评估结果。(平均绝对误差)

mean_absolute_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(lr_y_predict))

(2)支持向量回机(回归)

#从sklearn.svm中导入支持向量机(回归)模型。

from sklearn.svm import SVR

#使用线性核函数配置的支持向量机进行回归训练,并且对测试样本进行预测。

linear_svr = SVR(kernel='linear')kernel='poly、kernel='rbf'

线性核函数、多项式核函数、径向基(高斯)核函数

(3)K近邻(回归)

#从sklearn.neighbors导入KNeighborRegressor(K近邻回归器)。

from sklearn.neighbors import KNeighborsRegressor

#初始化K近邻回归器,并且调整配置,使得预测的方式为平均回归:weights='uniform'

uni_knr = KNeighborsRegressor(weights='uniform')

#初始化K近邻回归器,并且调整配置,使得预测的方式为根据距离加权回归:weights='distance'

dis_knr = KNeighborsRegressor(weights='distance')

(4)回归树(回归树叶节点的数据类型是连续型)

#从sklearn.tree中导入DecisionTreeRegressor。

from sklearn.tree import DecisionTreeRegressor

(5)集成模型

#从sklearn.ensemble中导入RandomForestRegressor、ExtraTreesGressor以及GradientBoostingRegressor。(随机森林回归、极端回归森林、梯度提升回归树)

from sklearn.ensemble import RandomForestRegressor, ExtraTreesRegressor, GradientBoostingRegressor

 

#利用训练好的极端回归森林模型,输出每种特征对预测目标的贡献度。

print np.sort(zip(etr.feature_importances_, boston.feature_names), axis=0)p79

三、无监督经典学习

1、数据聚类2、找离群样本3、特征降维

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值