-
Notifications
You must be signed in to change notification settings - Fork 29.3k
[SPARK-8965][Docs] Add ml-guide Python Example: Estimator, Transformer, and Param #8081
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 16 commits
6c18058
21ac1e5
2cd2985
242aedd
bb9a4b1
5a05dee
39ddd50
fe6b112
f4b9bc8
84356cd
7f70b2d
23d61d6
cc9ee94
1c58304
d2e71fa
379c592
f5cbea6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -355,6 +355,75 @@ jsc.stop(); | |
| {% endhighlight %} | ||
| </div> | ||
|
|
||
| <div data-lang="python"> | ||
| {% highlight python %} | ||
| from pyspark import SparkContext | ||
| from pyspark.mllib.regression import LabeledPoint | ||
| from pyspark.ml.classification import LogisticRegression | ||
| from pyspark.ml.param import Param, Params | ||
| from pyspark.sql import Row, SQLContext | ||
|
|
||
| sc = SparkContext(appName="SimpleParamsExample") | ||
| sqlContext = SQLContext(sc) | ||
|
|
||
| # Prepare training data. | ||
| # We use LabeledPoint. | ||
| training = sc.parallelize( | ||
| [LabeledPoint(1.0, [0.0, 1.1, 0.1]), | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use PEP8 style guidelines for Python: [http://legacy.python.org/dev/peps/pep-0008/](The issue here is indentation.) |
||
| LabeledPoint(0.0, [2.0, 1.0, -1.0]), | ||
| LabeledPoint(0.0, [2.0, 1.3, 1.0]), | ||
| LabeledPoint(1.0, [0.0, 1.2, -0.5])]) | ||
|
|
||
| # Create a LogisticRegression instance. This instance is an Estimator. | ||
| lr = LogisticRegression(maxIter=10, regParam=0.01) | ||
| # Print out the parameters, documentation, and any default values. | ||
| print "LogisticRegression parameters:\n" + lr.explainParams() + "\n" | ||
|
|
||
| # Learn a LogisticRegression model. This uses the parameters stored in lr. | ||
| model1 = lr.fit(training.toDF()) | ||
|
|
||
| # Since model1 is a Model (i.e., a transformer produced by an Estimator), | ||
| # we can view the parameters it used during fit(). | ||
| # This prints the parameter (name: value) pairs, where names are unique IDs for this | ||
| # LogisticRegression instance. | ||
| print "Model 1 was fit using parameters: " | ||
| print model1.extractParamMap() | ||
|
|
||
| # We may alternatively specify parameters using a Python dictionary as a paramMap | ||
| paramMap = {lr.maxIter: 20} | ||
| paramMap[lr.maxIter] = 30 # Specify 1 Param, overwriting the original maxIter. | ||
| paramMap.update({lr.regParam: 0.1, lr.threshold: 0.55}) # Specify multiple Params. | ||
|
|
||
| # You can combine paramMaps, which are python dictionaries. | ||
| paramMap2 = { lr.probabilityCol: "myProbability" } # Change output column name | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. python style: remove spaces: |
||
| paramMapCombined = paramMap.copy() | ||
| paramMapCombined.update(paramMap2) | ||
|
|
||
| # Now learn a new model using the paramMapCombined parameters. | ||
| # paramMapCombined overrides all paramters set earlier via lr.set* methods. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. typo: paramters |
||
| model2 = lr.fit(training.toDF(), paramMapCombined) | ||
| print "Model 2 was fit using parameters: " | ||
| print model2.extractParamMap() | ||
|
|
||
| # Prepare test data | ||
| test = sc.parallelize( | ||
| [LabeledPoint(1.0, [-1.0, 1.5, 1.3]), | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fix indentation |
||
| LabeledPoint(0.0, [ 3.0, 2.0, -0.1]), | ||
| LabeledPoint(1.0, [ 0.0, 2.2, -1.5])]) | ||
|
|
||
| # Make predictions on test data using the Transformer.transform() method. | ||
| # LogisticRegression.transform will only use the 'features' column. | ||
| # Note that model2.transform() outputs a "myProbability" column instead of the usual | ||
| # 'probability' column since we renamed the lr.probabilityCol parameter previously. | ||
| prediction = model2.transform(test.toDF()) | ||
| selected = prediction.select("features", "label", "myProbability", "prediction") | ||
| for row in selected.collect(): | ||
| print row | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fix indentation |
||
|
|
||
| sc.stop() | ||
| {% endhighlight %} | ||
| </div> | ||
|
|
||
| </div> | ||
|
|
||
| ## Example: Pipeline | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Spark SQL can convert RDDs of LabeledPoints into DataFrames."