机器学习之多元线性回归问题综合应用示例:简单案例+解决红酒质量的判断问题
補博客持續更新中🤟🤟🤟🤟🤟不斷更不斷更🙌🙌🙌
文章目錄
- 簡單案例來啦
- 紅酒質量的判斷問題
- 讀入數據
- 用散點圖考察個別數據關系
- 得到所有的變量X和變量Y
- 先選擇一個簡單模型進行擬合和評估
- 詳細評估(交叉驗證)
- 多模型的嘗試和選擇
簡單案例來啦
下面舉一個簡單的例子哈🍯🍯🍯
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeaturesX_train = [[6], [8], [10], [14], [18]] y_train = [[7], [9], [13], [17.5], [18]] X_test = [[6], [8], [11], [16]] y_test = [[8], [12], [15], [18]] regressor = LinearRegression() ##沒有任何處理,默認一元線性模型 regressor.fit(X_train, y_train) ##這里可以看到我們是直接fit的,沒有做任何處理 xx = np.linspace(0, 26, 100)##np.linspace()在這里指的是從0開始,到26結束,這段區間內,取100個樣本數量yy = regressor.predict(xx.reshape(xx.shape[0], 1)) plt.plot(xx, yy) ##得到類似y=x這種結果的圖像quadratic_featurizer = PolynomialFeatures(degree=2) ##用加強版 X_train_quadratic = quadratic_featurizer.fit_transform(X_train) X_test_quadratic = quadratic_featurizer.transform(X_test)##這兩步很重要!!X_train當然是要fit_transform的,但是別忘了X_test也要transform!!!regressor_quadratic = LinearRegression() regressor_quadratic.fit(X_train_quadratic, y_train) xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1)) ##格式問題啦 plt.plot(xx, regressor_quadratic.predict(xx_quadratic), c='r', linestyle='--') plt.title('Pizza price regressed on diameter') plt.xlabel('Diameter in inches') plt.ylabel('Price in dollars') plt.axis([0, 25, 0, 25]) plt.grid(True) plt.scatter(X_train, y_train) ##散點圖,也就是下面的藍色點 plt.show() print(X_train) print(X_train_quadratic) print(X_test) print(X_test_quadratic) print('Simple linear regression r-squared', regressor.score(X_test, y_test)) print('Quadratic regression r-squared', regressor_quadratic.score(X_test_quadratic, y_test))
可以看到用多項式回歸得到的曲線更加接近目標點🌭
可以試著嘗試更高階的多項式:下面測試4階、9階
4階:
9階:
可以看到更加接近目標點了!!還是那句話,這個東西不是你的degree越高,效果就越好的,只是大部分情況下可能是這樣,但是有時候可能degree=9的情況還不如degree=1的情況,所以這個東西沒有絕對!🍙🍗🍚
紅酒質量的判斷問題
這個數據集呢是我老師上課的時候的,所以我也沒有,但是主要是學習這個過程,然后應用到自己已有的數據集上就行了🥪
本項目數據集的地址:
/data/shixunfiles/ddca0fd2b1025671866a9344eca4dac7_1633960156078.csv
讀入數據
##魔法命令 %matplotlib inline import numpy as np import pandas as pd # 讀入數據 filename = '/data/shixunfiles/ddca0fd2b1025671866a9344eca4dac7_1633960156078.csv' df = pd.read_csv(filename)##不需要加sep=";" df.describe()
委屈大家看看啦
用散點圖考察個別數據關系
import matplotlib.pyplot as plt plt.scatter(df['酒精'],df['質量等級']) ##用散點,得到對應的列的所有的值 plt.xlabel('Alcohol') plt.ylabel('Quality') plt.title('Alcohol Against Quality') plt.show()得到所有的變量X和變量Y
columns = list(df.columns) print(columns)output:
[‘固定酸’, ‘揮發性酸’, ‘檸檬酸’, ‘糖分’, ‘氯化物’, ‘游離二氧化硫’, ‘總二氧化硫’, ‘密度’, ‘pH值’, ‘硫酸鹽’, ‘酒精’, ‘質量等級’]
?????在這里要區分一個非常重要的東西,也是一個很重要的點就是對于拿到像類似上述那樣的數據集的時候,多個變量的,我們拿到的X和y指的到底是什么!!具體看下
可以看到X是一個二維數組,y是一個一維數組!不要搞亂了!!???
先選擇一個簡單模型進行擬合和評估
既然是選擇簡單的模型,那當然是選擇——簡單線性模型啦,得到score
from sklearn.linear_model import LinearRegression 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) model = LinearRegression() model.fit(X_train,y_train) score = model.score(X_test,y_test) print(score)
這個結果可以用“慘不忍睹”來形容💔
打個圖給大家看:
詳細評估(交叉驗證)
# ========= begin ========from sklearn.model_selection import cross_val_score from sklearn.model_selection import ShuffleSplit scores = cross_val_score(model,X,y,cv = ShuffleSplit(n_splits = 10,test_size=0.2)) print(scores)
看看上面值的平均值和方差:
好了那么“一點點”
多模型的嘗試和選擇
最后一步了,那就是如何找到合適的模型和預處理方式,這一步來說的話呢,就是自己去找到合適的模型和預處理方式:
提示:
預處理可選 PolynomialFeatures 和/或 StandardScaler;
模型可選擇 LinearRegression、Ridge、Lasso 或 SGDRegressor 等;
建議用管道方便處理;
用 cross_val_score 結合 ShuffleSplit 進行交叉驗證。
這一部分就是自己玩兒啦,提供一下我的測試代碼,不全,中間一直在刪減,只作為參考
總結
以上是生活随笔為你收集整理的机器学习之多元线性回归问题综合应用示例:简单案例+解决红酒质量的判断问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: APP移动应用安全加固是如何进行的?
- 下一篇: 【边缘设备】nanoPC-T4 挂载NV