회귀 분석의 2

5005 단어 Python

최소 2승법의 전제를 확인하다


- 분포도 생성 -
f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, figsize =(15,3)) 
ax1.scatter(data_cleaned['Year'],data_cleaned['Price'])
ax1.set_title('Price and Year')
ax2.scatter(data_cleaned['EngineV'],data_cleaned['Price'])
ax2.set_title('Price and EngineV')
ax3.scatter(data_cleaned['Mileage'],data_cleaned['Price'])
ax3.set_title('Price and Mileage')



plt.show()

상기 도표에서
가격, 제조 연수, 가격, 주행 거리, 가격과 배기량을 나타낸다.
지수 분포도라면 매개 변수의 대수를 되돌려줍니다
대수로 바꾸는 방법
np.log(x)
# Priceを対数に変換していきます
log_price = np.log(data_cleaned['Price'])

# データフレームに追加します
data_cleaned['log_price'] = log_price
data_cleaned
Brand
Price
Body
Mileage
EngineV
Engine Type
Registration
Year
log_price
0
BMW 4200.0 sedan 277 2.0 Petrol yes 1991 8.342840
1
Mercedes-Benz 7900.0 van 427 2.9 Diesel yes 1999 8.974618
2
Mercedes-Benz 13300.0 sedan 358 5.0 Gas yes 2003 9.495519
3
Audi 23000.0 crossover 240 4.2 Petrol yes 2007 10.043249
4
Toyota 18300.0 crossover 120 2.0 Petrol yes 2011 9.814656
...
... ... ... ... ... ... ... ... ...
3862
Volkswagen 11500.0 van 163 2.5 Diesel yes 2008 9.350102
3863
Toyota 17900.0 sedan 35 1.6 Petrol yes 2014 9.792556
3864
Mercedes-Benz 125000.0 sedan 9 3.0 Diesel yes 2014 11.736069
3865
BMW 6500.0 sedan 1 3.5 Petrol yes 1999 8.779557
3866
Volkswagen 13500.0 van 124 2.0 Diesel yes
# 改めて散布図を作成します
f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, figsize =(15,3))
ax1.scatter(data_cleaned['Year'],data_cleaned['log_price'])
ax1.set_title('Log Price and Year')
ax2.scatter(data_cleaned['EngineV'],data_cleaned['log_price'])
ax2.set_title('Log Price and EngineV')
ax3.scatter(data_cleaned['Mileage'],data_cleaned['log_price'])
ax3.set_title('Log Price and Mileage')


plt.show()

다중 공통 선형


정규성
• 평균값 0 = 슬라이스 값은 대응 가능
분산성
# データフレームの列を見ていきましょう
data_cleaned.columns.values
array(['Brand', 'Body', 'Mileage', 'EngineV', 'Engine Type',
'Registration', 'Year', 'log_price'], dtype=object)

sklearn에서 다중 공선성을 확인하는 방법이 없습니다


그럼 확인해 볼까요?
A, 스태킹 모델 사용(vif)
# 多重共線性を確認するためのモジュールをインポートしていきます
from statsmodels.stats.outliers_influence import variance_inflation_factor

# 多重共線性を確認するための列を指定した変数を作成します
variables = data_cleaned[['Mileage','Year','EngineV']]

# 新しいデータフレームを作成します
vif = pd.DataFrame()A

# それぞれのVIFの値を求めていきます
vif["VIF"] = [variance_inflation_factor(variables.values, i) for i in range(variables.shape[1])]
# 対応する列の名前を追加します
vif["Features"] = variables.columns
VIF
VIF=1 다중 공통 선형 없음
15# 結果の確認 vif VIF
Features
0
3.791584 Mileage
1
10.354854 Year
2
7.662068 EngineV

Year가 다른 부분과 굉장히 연관이 있다는 걸 알 수 있어요.


DORP Mesort 제거 사용
# Yearに関するデータを削除します
data_no_multicollinearity = data_cleaned.drop(['Year'],axis=1)
다중 공통 선형 참조 소스
( https://statisticalhorizons.com/multicollinearity )

가상 변수 만들기


분류 분석은 가상 변수로 분석할 수 있다.
가상 생성
pandas pd.get_dummies(df[, drop_first])

분류 변수의 수가 N이면 만들 위조 변수의 수가 N-1이어야 합니다.

# get_dummiesメソッドを使ってダミー変数を作成します
data_with_dummies = pd.get_dummies(data_no_multicollinearity, drop_first=True)
# 結果を表示します
data_with_dummies.head()

정렬 데이터

# 全ての列の名前を表示します
data_with_dummies.columns.values
# 従属変数、独立変数、ダミー変数で並べかをしていきます
cols = ['log_price', 'Mileage', 'EngineV', 'Brand_BMW',
       'Brand_Mercedes-Benz', 'Brand_Mitsubishi', 'Brand_Renault',
       'Brand_Toyota', 'Brand_Volkswagen', 'Body_hatch', 'Body_other',
       'Body_sedan', 'Body_vagon', 'Body_van', 'Engine Type_Gas',
       'Engine Type_Other', 'Engine Type_Petrol', 'Registration_yes']
# 新しいデータフレームに並べ替えたデータを入れていきます
data_preprocessed = data_with_dummies[cols]
data_preprocessed.head()

좋은 웹페이지 즐겨찾기