机器学习及实践-----从零开始通往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


回归预测:
线性回归: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 、特征降维
 
 
 
 
 
 
 



猜你喜欢

转载自blog.csdn.net/u012735708/article/details/79080147