Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Graph Tech
- GSQL
- Federated Learning
- 연합학습
- GDB
- RStudio
- Neo4j
- 분산 병렬 처리
- 딥러닝
- 그래프 에코시스템
- graph database
- RDD
- 그래프 질의언어
- 그래프
- graph
- SQL
- Graph Ecosystem
- GraphX
- Cypher
- 빅데이터
- BigData
- 인공지능
- 그래프 데이터베이스
- Python
- SparkML
- spark
- DeepLearning
- TensorFlow
- TigerGraph
- r
Archives
- Today
- Total
Hee'World
Spark ML 03 (Pyspark) 본문
Spark ML의 로지스틱 회귀를 수행하는 예제
로지스틱 회귀(영어: logistic regression)는 영국의 통계학자인 D. R. Cox가 1958년[1] 에 제안한 확률 모델로서 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계 기법이다.
로지스틱 회귀의 목적은 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수간의 관계를 구체적인 함수로 나타내어 향후 예측 모델에 사용하는 것이다. 이는 독립 변수의 선형 결합으로 종속 변수를 설명한다는 관점에서는 선형 회귀 분석과 유사하다. 하지만 로지스틱 회귀는 선형 회귀 분석과는 다르게 종속 변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류 (classification) 기법으로도 볼 수 있다.
흔히 로지스틱 회귀는 종속변수가 이항형 문제(즉, 유효한 범주의 개수가 두개인 경우)를 지칭할 때 사용된다. 이외에, 두 개 이상의 범주를 가지는 문제가 대상인 경우엔 다항 로지스틱 회귀 (multinomial logistic regression) 또는 분화 로지스틱 회귀 (polytomous logistic regression)라고 하고 복수의 범주이면서 순서가 존재하면 서수 로지스틱 회귀 (ordinal logistic regression) 라고 한다.[2] 로지스틱 회귀 분석은 의료, 통신, 데이터마이닝과 같은 다양한 분야에서 분류 및 예측을 위한 모델로서 폭넓게 사용되고 있다.
https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1_%ED%9A%8C%EA%B7%80
In [1]:
df = spark.read.csv("data/Log_Reg_dataset.csv", inferSchema=True, header=True)
In [2]:
df.count()
Out[2]:
In [3]:
len(df.columns)
Out[3]:
In [4]:
df.printSchema()
In [5]:
df.show(5)
In [6]:
df.summary().show()
In [7]:
df.groupBy('Platform').count().show()
In [8]:
df.groupBy('Country').count().show()
In [9]:
df.groupBy('Status').count().show()
In [10]:
df.groupBy('Country').mean().show()
In [11]:
df.groupBy('Platform').mean().show()
In [12]:
df.groupBy('Status').mean().show()
In [13]:
from pyspark.ml.feature import StringIndexer, OneHotEncoder
In [14]:
platform_indexer = StringIndexer(inputCol='Platform', \
outputCol='Platform_Num').fit(df)
In [15]:
df = platform_indexer.transform(df)
df.show(5)
In [16]:
platform_encoder = OneHotEncoder(inputCol='Platform_Num', outputCol='Platform_Vector')
In [18]:
df = platform_encoder.transform(df)
df.show(5)
In [19]:
df.groupBy('Platform').count().orderBy('count', ascending=False).show(5)
In [20]:
df.groupBy('Platform_Num').count().orderBy('count', ascending=False).show(5)
In [21]:
df.groupBy('Platform_Vector').count().orderBy('count', ascending=False).show(5)
In [23]:
country_indexer = StringIndexer(inputCol='Country', \
outputCol='Country_Num').fit(df)
df = country_indexer.transform(df)
In [26]:
country_encoder = OneHotEncoder(inputCol='Country_Num', \
outputCol='Country_Vector')
df = country_encoder.transform(df)
In [27]:
df.select(['Country', 'Country_Num', 'Country_Vector']).show(5)
In [28]:
from pyspark.ml.feature import VectorAssembler
In [30]:
df_assembler = VectorAssembler(inputCols=['Platform_Vector', 'Country_Vector', 'Age', \
'Repeat_Visitor','Web_pages_viewed'], \
outputCol='features')
df = df_assembler.transform(df)
In [31]:
df.printSchema()
In [32]:
df.select(['features', 'Status']).show(5)
In [33]:
model_df = df.select(['features', 'Status'])
In [34]:
from pyspark.ml.classification import LogisticRegression
In [35]:
train_df, test_df = model_df.randomSplit([0.7, 0.3])
In [37]:
train_df.count()
Out[37]:
In [38]:
test_df.count()
Out[38]:
In [40]:
log_reg_model = LogisticRegression(labelCol='Status')
log_reg_model_fit = log_reg_model.fit(train_df)
In [41]:
log_reg_model_fit.coefficients
Out[41]:
In [42]:
log_reg_model_fit.intercept
Out[42]:
In [43]:
train_result = log_reg_model_fit.evaluate(train_df).predictions
In [44]:
correct_preds = train_result.filter(train_result['Status']==1) \
.filter(train_result['prediction']==1).count()
In [45]:
train_df.filter(train_df['Status']==1).count()
Out[45]:
In [46]:
correct_preds
Out[46]:
In [47]:
correct_preds/train_df.filter(train_df['Status']==1).count()
Out[47]:
In [48]:
from pyspark.ml.evaluation import BinaryClassificationEvaluator
In [49]:
results = log_reg_model_fit.evaluate(test_df).predictions
In [50]:
results.select(['Status', 'prediction']).show(20)
In [51]:
results[(results.Status == 1) & (results.prediction == 1)].count()
Out[51]:
In [52]:
results[(results.Status == 1) & (results.prediction == 0)].count()
Out[52]:
In [55]:
results[(results.Status == 0) & (results.prediction == 0)].count()
Out[55]:
In [54]:
results[(results.Status == 0) & (results.prediction == 1)].count()
Out[54]:
In [ ]:
'BigData > Spark' 카테고리의 다른 글
Spark ML 05(Pyspark) (0) | 2020.05.04 |
---|---|
Spark ML 04(Pyspark) (0) | 2020.05.03 |
Spark ML 02 (Pyspark) (0) | 2020.04.26 |
Spark ML (Pyspark) (0) | 2020.04.25 |
Spark Streaming (PySpark) (0) | 2020.04.21 |
Comments