欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

sklearn常用机器学习算法

最编程 2024-08-13 11:27:09
...

1.拆分训练集和测试集

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=42)

2.logistic回归

from sklearn import linear_model
logistic=linear_model.LogisticRegression()
logistic=linear_model.LogisticRegression(penalty='l1',class_weight='balanced')
logistic.fit(x_train,y_train)
y_pred=logistic.predict(x_test)
#如果只预测概率大小,用下面的函数
y_pred=logistic.predict_proba(x_test)

sklearn中的逻辑回归主要有2类:LogisticRegression和LogisticRegressionCV,主要区别在于后者用交叉验证来选择正则化系数C。而前者需要自己每次指定一个正则化系数。除了交叉验证,及选择正则化系数C,使用方法基本相同。
调试的重要参数:
penalty:正则化选项,默认'l2'。'l1'可以抵抗共线性,还会起到特征选择的作用,不重要的特征会将系数变为0;'l2'一般不会变为0,会将不重要的特征系数变得很小,起到避免过拟合的作用。
penalty参数会影响损失函数优化算法—参数solver的选择,'l2'有5种可选算法:newton-cg、lbfgs、liblinear、 sag和saga。'l1'只有2种可选算法:liblinear和saga。这是因为'l1'的损失函数非连续可导,newton-cg、lbfgs和sag优化算法时都需要一阶或者二阶连续导数。
solver: 损失函数优化方法,默认是“liblinear”,有5中方法可供选择:newton-cg、lbfgs、liblinear、 sag和saga。
参考:blog.****.net/sun_shengyu…
3.SVM分类

from sklearn import svm
model=svm.SVC()
model.fit(x_train,y_train)
y_pred=model.predict(x_test)

4.RandomForest分类

from sklearn.ensemble import RandomForestClassifier
rf0=RandomForestClassifier(oob_score=True)
rf0.fit(x_train,y_train)
y_pred=rf0.predict(x_test)

RandomForestRegressor回归模型

rf1=RandomForestRegressor(n_estimators=5,min_samples_leaf=5)
rf1.fit(x_train,y_train)
y_pred=rf1.predict(x_test)
plt.scatter(y_test,y_pred,alpha=0.1,s=6)
metrics.r2_score(y_test,y_pred)

随机森林模型既可做分类,也可做回归(RandomForestRegressor),重要参数:
n_estimators:森林中树的数量,默认10。
max_features:寻找最优分隔的最大特征数,默认auto。一般是特征数的对数或算术平方根,也可以设置为特征数的40%-50%避免过拟合。
max_depth:树的最大深度,默认None,节点将展开到所有的叶子都是纯净的,或者直到所有的叶子都少于最小分割样本,避免过拟合。
min_ samples_split:树中一个节点需要用来分裂的最少样本数,默认2。
min_ samples_leaf:树中叶子节点需要的最少样本数,默认1。
min_weight_fraction_leaf:与min_ samples_split类似,比例。
max_ leaf_ nodes:树中多能有多少叶子节点,默认None。
5. adaboost分类

from sklearn.ensemble import AdaboostClassifier
#迭代100次,学习率为0.1
clf=AdaboostClassifier(n_estimators=100,learning_rate=0.1)
clf.fit(x_train,y_train)
y_pred=clf.predict(x_test)

6. GBDT分类

from sklearn.ensemble import GradientBoostClassifier
#迭代100次,学习率为0.1
clf=GradientBoostClassifier(n_estimators=100,learning_rate=0.1)
clf.fit(x_train,y_train)
y_pred=clf.predict(x_test)

7. 神经网络

from sklearn import linear_model
from sklearn.neural_network import BernoulliRBM
from sklearn.pipeline import Pipeline
logistic=linear_model.LogisticRegression()
rbm=BernoulliRBM(random_state=0,verbose=True)
classifier=Pipeline(steps=[('rbm',rbm),('logistic',logistic)
rbm.leearning_rate=0.1
rbm.n_iter=20
rbm.n_components=100
#正则化强度参数
logistic.C=1000
classifier.fit(x_train,y_train)
y_pred=classifier.predict(x_test)

8.XGboost

from xgboost import XGBClassfier
from matplotlib import pylot
model=XGBClassifier()
model.fit(x_train,y_train)
y_pred=model.predict(x_test)
#查看预测准确率
accuracy_score(y_test,y_pred)
#绘制特征的重要性
from xgboost import plot_importance
plot_importance(model)
plt.show()

9.岭回归
岭回归是通过在普通最小二乘线性回归的RSS(残差平方和,别称SSE)基础上加上正则项('l2'范数),视线对系数的压缩惩罚,避免过拟合及产生共线性。
缺点:可有效减小方差,但不能保证系数为0,依然留有长串特征使模型不便于解释。

from sklearn import linear_model
#设置正则化强度
clf=linear_model.Ridge(alpha=0.1)
clf.fit(x_train,y_train)
clf.coef_
clf.intercept_
y_pred=clf.predict(x_test)
#求预测,等同predict
clf.decision_function(x)
#拟合优度R^2
clf.score(x_train,y_train)
#获取参数信息
clf.get_params()
#重新设置参数,截距设置为无
clf.set_params(fit_intercept=False)

10.Lasso回归
在普通最小二乘线性回归的RSS基础上加上正则项('l1'范数)来实现系数压缩惩罚,避免过拟合和产生共线性。 回归系数可为0,真正起到特征筛选效果。

from sklearn import linear_model
clf=linear_model.Lasso(alpha=0.1)
clf.fit(x_train,y_train)
clf.coef_
clf.intercept_
clf.predict(x_test)
#同上预测
clf.decision_function(x_test)
#拟合优度R^2
clf.score(x_train,y_train)
clf.get_params()
clf.set_params(fit_intercept=False)

参数调整
每种分类或回归都有很多可以设置的参数,sklearn的模块GridSearchCV可以帮助我们设置一个比较好的参数,以iris数据集为例,用adaboost算法找最好的learning_rate。

from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold
learning_rate=[0.0001,0.001,0.01,0.1,0.2,0.3]
model=AdaBoostClassifier()
param_grid=dict(learning_rate=learning_rate)
#设置10折交叉验证
kfold=StratifiedKFold(n_splits=10,shuffle=True)
grid_search=GridSearchCV(model,param_grid,scoring='neg_log_loss',n_jobs=-1,cv=kfold)
grid_result=grid_search.fit(iris,iris_y)
#打印最好的 learning_rate
print('Best:%f using %s' % (grid_result.best_score_,grid_result.best_params_))
#给定的6个学习中,最好的学习率是0.3
means=grid_result.cv_results_['mean_test_score']
stds=grid_result.cv_results_['std_test_score']
params=grid_result.cv_results_['params']
for mean,stdev,param in zip(means,stds,params):
    print('%f (%f) with: %r'%(mean,stdev,param))

查看结果准确率等

from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import confusion_matrix
#计算准确率
accuracy=accuracy_score(y_test,y_pred)
#计算auc,一般针对两类分类问题
auc=roc_auc_score(y_test,y_pred)
#计算混淆矩阵,一般针对两类分类问题
conMat=confusion_matrix(y_test,y_pred)