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