Python 套索和岭回归低精度问题

Python 套索和岭回归低精度问题,python,machine-learning,regression,lasso-regression,Python,Machine Learning,Regression,Lasso Regression,我在我的森林火灾样本数据集上应用套索回归和岭回归,但是我的准确度太低,我应该达到 我已经尝试更改alpha和train设置值 #Kütüphaneleri importladım import pandas as pd import numpy as np from sklearn.preprocessing import LabelEncoder, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.

我在我的森林火灾样本数据集上应用套索回归和岭回归,但是我的准确度太低,我应该达到

我已经尝试更改alpha和train设置值

#Kütüphaneleri importladım
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
#Dosyami yukledim
forest = pd.read_csv('forestfires.csv')
#Coulmn ve row feaute adlarimi duzenledim
forest.month.replace(('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'),(1,2,3,4,5,6,7,8,9,10,11,12), inplace=True)
forest.day.replace(('mon','tue','wed','thu','fri','sat','sun'),(1,2,3,4,5,6,7), inplace=True)
# iloc indeksin sırasıyla, loc indeksin kendisiyle işlem yapmaya olanak verir.Burada indeksledim
X = forest.iloc[:,0:12].values
y = forest.iloc[:,12].values
# 30 -70 olarak train test setlerimi ayirdim
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)
#x-y axis trainler arasina linear regressyon kurdum
lr = LinearRegression()
lr.fit(X_train, y_train)
#ridge regression modeli kurdum
rr = Ridge(alpha=0.01)
rr.fit(X_train, y_train)

rr100 = Ridge(alpha=100)
rr100.fit(X_train, y_train)
#lasso regression icin modelledim
train_score = lr.score(X_train, y_train)
test_score = lr.score(X_test, y_test)

Ridge_train_score = rr.score(X_train, y_train)
Ridge_test_score = rr.score(X_test, y_test)

Ridge_train_score100 = rr100.score(X_train, y_train)
Ridge_test_score100 = rr100.score(X_test, y_test)

print("linear regression train score:", train_score)
print("linear regression test score:", test_score)
print('ridge regression train score low score: %.2f' % Ridge_train_score)
print('ridge regression test score low score: %.2f' % Ridge_test_score)
print('ridge regression train score high score: %.2f' % Ridge_train_score100)
print('ridge regression test score high score: %.2f' % Ridge_test_score100)

考虑你的问题:我在你的代码中没有看到任何
Lasso
回归。尝试一些
LassoCV
ElasticNetCV(l1_比率=[.1,5,7,9,95,99,1])
始终是找到合理α值的良好开端。对于Ridge,
RidgeCV
是CV算法。与
LassoCV
ElasticNetCV
相比,
RidgeCV
使用LOO-CV并采用一组固定的alpha值,因此需要更多的用户处理以获得最佳输出。以下面给出的代码示例为例:

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, LassoCV, ElasticNetCV
from sklearn.linear_model import Ridge, RidgeCV

forest = pd.read_csv('forestfires.csv')
#Coulmn ve row feaute adlarimi duzenledim
forest.month.replace(('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'),(1,2,3,4,5,6,7,8,9,10,11,12), inplace=True)
forest.day.replace(('mon','tue','wed','thu','fri','sat','sun'),(1,2,3,4,5,6,7), inplace=True)
# iloc indeksin sırasıyla, loc indeksin kendisiyle işlem yapmaya olanak verir.Burada indeksledim
X = forest.iloc[:,0:12].values
y = forest.iloc[:,12].values
# 30 -70 olarak train test setlerimi ayirdim
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)
#x-y axis trainler arasina linear regressyon kurdum
lr = LinearRegression()

# The cross validation algorithms:
lasso_cv = LassoCV()  # LassoCV will try to find the best alpha for you
# ElasticNetCV will try to find the best alpha for you, for a given set of combinations of Ridge and Alpha
enet_cv = ElasticNetCV()
ridge_cv = RidgeCV()

lr.fit(X_train, y_train)

lasso_cv.fit(X_train, y_train)
enet_cv.fit(X_train, y_train)
ridge_cv.fit(X_train, y_train)

#ridge regression modeli kurdum
rr = Ridge(alpha=0.01)
rr.fit(X_train, y_train)
rr100 = Ridge(alpha=100)
现在使用以下命令检查找到的alpha值:

print('LassoCV alpha:', lasso_cv.alpha_)
print('RidgeCV alpha:', ridge_cv.alpha_)
print('ElasticNetCV alpha:', enet_cv.alpha_, 'ElasticNetCV l1_ratio:', enet_cv.l1_ratio_)
ridge_alpha = ridge_cv.alpha_
enet_alpha, enet_l1ratio = enet_cv.alpha_, enet_cv.l1_ratio_
并将新的
RdigeCV
和/或
ElasticNetCV
集中在这些值周围(
l1\u比率
s
1
将被
ElasticNetCV
忽略):


这应该是为您的模型找到一个好的alpha值和/或l1比率的第一步。当然,其他步骤,如特征工程和选择正确的模型(f.i.Lasso:执行特征选择)应在找到好的参数之前进行:

请您提供一个工作和可执行的最小示例,如中所示?有了你提供的信息,解决你的问题是不可能的。此外,这是关于回归解算器的内部算法,所以这可能更适合stats.stackexchange.Scotty谢谢你的解释我真的很感激我已经习惯了这种模型和算法尽管我有一条关于未来警告FutureWarning的错误消息:你应该为“cv”指定一个值,而不是依赖默认值。在版本0.22中,默认值将从3更改为5。警告。警告(CV_警告,FutureWarning)您能帮我解决这个问题吗?我的sklearn版本:0.20.1欢迎您。是的,正如警告消息所述,您应该为cv指定一个值。例如
enet\u cv=ElasticNetCV(cv=5)
lasso\u cv=LassoCV(cv=5)
enet_new_l1ratios = [enet_l1ratio * mult for mult in [.9, .95, 1, 1.05, 1.1]]
ridge_new_alphas = [ridge_alpha * mult for mult in [.9, .95, 1, 1.05, 1.1]]

# fit Enet and Ridge again:
enet_cv = ElasticNetCV(l1_ratio=enet_new_l1ratios)
ridge_cv = RidgeCV(alphas=ridge_new_alphas)

enet_cv.fit(X_train, y_train)
ridge_cv.fit(X_train, y_train)