200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【Python-ML】SKlearn库L1正则化特征选择

【Python-ML】SKlearn库L1正则化特征选择

时间:2021-03-06 12:44:21

相关推荐

【Python-ML】SKlearn库L1正则化特征选择

# -*- coding: utf-8 -*-'''Created on 1月17日@author: Jason.F@summary: Scikit-Learn库逻辑斯蒂L1正则化-特征选择'''import pandas as pdimport numpy as npfrom sklearn.cross_validation import train_test_splitfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt#导入数据df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)df_wine.columns=['Class label','Alcohol','Malic acid','Ash','Alcalinity of ash','Magnesium','Total phenols','Flavanoids','Nonflavanoid phenols','Proanthocyanins','Color intensity','Hue','OD280/OD315 of diluted wines','Proline']print ('class labels:',np.unique(df_wine['Class label']))#print (df_wine.head(5))#分割训练集合测试集X,y=df_wine.iloc[:,1:].values,df_wine.iloc[:,0].valuesX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)#特征值缩放#归一化mms=MinMaxScaler()X_train_norm=mms.fit_transform(X_train)X_test_norm=mms.fit_transform(X_test)#标准化stdsc=StandardScaler()X_train_std=stdsc.fit_transform(X_train)X_test_std=stdsc.fit_transform(X_test)#L1正则化的逻辑斯蒂模型lr=LogisticRegression(penalty='l1',C=0.1)#penalty='l2'lr.fit(X_train_std,y_train)print ('Training accuracy:',lr.score(X_train_std, y_train))print ('Test accuracy:',lr.score(X_test_std, y_test))#比较训练集和测试集,观察是否出现过拟合print (lr.intercept_)#查看截距,三个类别print (lr.coef_)#查看权重系数,L1有稀疏化效果做特征选择#正则化效果,减少约束参数值C,增加惩罚力度,各特征权重系数趋近于0fig=plt.figure()ax=plt.subplot(111)colors=['blue','green','red','cyan','magenta','yellow','black','pink','lightgreen','lightblue','gray','indigo','orange']weights,params=[],[]for c in np.arange(-4,6,dtype=float):lr=LogisticRegression(penalty='l1',C=10**c,random_state=0)lr.fit(X_train_std,y_train)weights.append(lr.coef_[0])#三个类别,选择第一个类别来观察params.append(10**c)weights=np.array(weights)for column,color in zip(range(weights.shape[1]),colors):plt.plot(params,weights[:,column],label=df_wine.columns[column+1],color=color)plt.axhline(0,color='black',linestyle='--',linewidth=3)plt.xlim([10**(-5),10**5])plt.ylabel('weight coefficient')plt.xlabel('C')plt.xscale('log')plt.legend(loc='upper left')ax.legend(loc='upper center',bbox_to_anchor=(1.38,1.03),ncol=1,fancybox=True)plt.show()

结果:

('class labels:', array([1, 2, 3], dtype=int64))('Training accuracy:', 0.9838709677419355)('Test accuracy:', 0.98148148148148151)[-0.38378625 -0.15815556 -0.70033857][[ 0.28028457 0.0. -0.02806147 0.0.0.71013567 0.0.0.0.0.1.23592372][-0.64368703 -0.06896342 -0.05715611 0.0.0.0.0.0. -0.92722893 0.05967934 0. -0.37098083][ 0.0.06129709 0.0.0.0.-0.63710764 0.0.0.49858959 -0.35822494 -0.570042510. ]]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。