机器学习——监督学习几种经典模型特点

监督学习分为分类学习和回归学习,分类即从分类别中选择一个作为结果,其结果是离散的,回归待预测的结果是连续的,回归于分类的模型大同小异,这里只介绍分类学习
分类学习:
1、线性分类器
受限于数据特征与分类目标之间的线性假设。LogisticRegression采用精确解析的方法,计算时间长、模型性能高,SGDClassifier采用随机梯度上升的方法,时间短、模型性能略低。如果数据规模在10W以上,考虑到时间的耗用,最好采用后者。
2、支持向量机
其精妙的模型假设,可以让我们在高维度的数据中,筛选对预测任务最为有效的少数训练样本,节省了模型学习所需的数据内存,
同时也提高了模型的预测性能,但是占用更多的CPU资源和计算时间。
3、朴素贝叶斯
朴素贝叶斯模型被应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂
指数数量级向线性级减少,减少了内存和计算时间,模型训练时无法将各个特征之间的联系考量在内,使得它在数据特征关联性
较强的分类任务上表现不佳
4、K临近
该模型没有参数训练的过程,只是根据测试样本在训练数据的分布直接做出来的决策,计算复杂度和内存消耗很高。

5、决策树

方面了模型的可视化,无须考虑对数据的量化和标准化的,属于有参数模型,需要花费更多的时间在训练数据上

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report

titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#特征选择
X = titanic[['pclass','age','sex']]
y = titanic['survived']
#print(X.info())
#age需要补全,sex和pclass为类别型,需要转化为数值特征,用0/1代替
X['age'].fillna(X['age'].mean(),inplace=True)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
#特征转换
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'))
model = DecisionTreeClassifier()
model.fit(X_train,y_train)
y_predict = model.predict(X_test)
print(model.score(X_test,y_test))
report = classification_report(y_predict,y_test,target_names=['died', 'survived'])
print(report)
6、集成模型

集合模型整合了多种模型,或者多次就一种类型的模型进行多次建模,模型的估计参数的过程受到概率的影响,具有一定的不确定性,训练数据需要花费更多的时间,得到的模型更高的表现性能和更好的稳定性。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import classification_report
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#特征选择
X = titanic[['pclass','age','sex']]
y = titanic['survived']
X['age'].fillna(X['age'].mean(), inplace=True)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
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'))
#使用单一决策树
dtc = DecisionTreeClassifier()
dtc.fit(X_train,y_train)
dtc_y_pred = dtc.predict(X_test)
#使用随机森林分类器
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
rfc_y_pred = rfc.predict(X_test)
# 使用梯度提升决策树
gbc = GradientBoostingClassifier()
gbc.fit(X_train, y_train)
gbc_y_pred = gbc.predict(X_test)
print( 'The accuracy of decision tree is', dtc.score(X_test, y_test))
print(classification_report(dtc_y_pred, y_test))
print('The accuracy of random forest classifier is', rfc.score(X_test, y_test))
print(classification_report(rfc_y_pred, y_test))
print('The accuracy of gradient tree boosting is', gbc.score(X_test, y_test))
print(classification_report(gbc_y_pred, y_test))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值