机器学习→监督学习+无监督学习
监督学习→分类+回归(连续)
无监督学习→降维+聚类
分类→二分类+多类分类+多标签分类(判断一个样本是否同时属于多个不同类别)
分类:
逻辑斯特回归: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_score、mean_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、特征降维