Python notas + + Spark2.0 hadoop estudio --Python Spark MLlib regresión logística binaria

Parte del contenido anteriormente, durante el problema de dos clases, la regresión logística es también una clasificación común. La regresión logística utiliza una función sigmoide como el contenido básico para lograr la clasificación ideológico, tomó en uso MLlib introdujo en Pyspark ser implementado en la regresión logística.

El primer paso: Importe las bibliotecas necesarias

import sys
de tiempo de importación tiempo
pandas de importación como pd
matplotlib.pyplot importación como plt
de importación pyspark SparkConf, SparkContext
de importación pyspark.mllib.classification LogisticRegressionWithSGD
de importación pyspark.mllib.regression LabeledPoint
numpy importación como np
de BinaryClassificationMetrics importación pyspark.mllib.evaluation
de pyspark.mllib.feature StandardScaler importación

Paso 2: Realizar la preparación de datos (antes y modelar diferentes árboles, porque los datos de entrada es particularmente grande valor de intervalo, de ahí la necesidad de un funcionamiento normalización de datos utilizando regresión logística utilizando la función StandardScaler () implementado)

def get_mapping (RDD, idx):
rdd.map retorno (campos lambda: campos [idx])... distinct () zipWithIndex () collectAsMap ()

def extract_label (registro):
label = (registro de [-1])
de retorno flotador (etiqueta)

def extract_features (campo, categoriesMap, featureEnd):
categoryIdx = categoriesMap [Field [3]]
categoryFeatures = np.zeros (LEN categoriesMap) ()
categoryFeatures [categoryIdx] = 1
numericalFeatures = [convert_float (campo) para el campo en campo [4: featureEnd]]
retorno np.concatenate ((categoryFeatures, numericalFeatures))

def convert_float (x):
return ( "?" 0 si x == otro flotador (x))

def PrepareData (sc):
print ( "Los datos serán cargados ...")
rawDataWithHeader = sc.textFile (camino de + "datos / train.tsv")
encabezado = rawDataWithHeader.first ()
rawData = rawDataWithHeader.filter (lambda x: x = cabecera)
RDATA = rawData.map (lambda x: x.replace ( "\" " ""))
líneas = rData.map (lambda x: x.split ( "\ t"))
print (" El número de datos :" + str (lines.count ()))
print ( "antes de la normalización:")
campos lambda categoriesMap = lines.map. (: campos [3]) \
.. distintos () zipWithIndex () collectAsMap ()
líneas labelRDD = .map (lambda r: extract_label (r))
featureRDD = lines.map (lambda r: extract_features (r, categoriesMap, len (r) - 1))
para i en featureRDD.first ():
impresión (str (i) + " "),
de impresión ("")
imprimir ( "Después de la normalización:")
stdScaler = StandardScaler (withMean = True, withStd = True) .fit (featureRDD)
ScalerFeatureRDD = stdScaler.transform (featureRDD)
para i en ScalerFeatureRDD.first ():
print (str (i) +" , "),
LabelPOINT = labelRDD.zip (ScalerFeatureRDD)
labelpointRDD = labelpoint.map (lambda r: LabeledPoint (r [0], r [1]))
(trainData, validationData, TestData) = labelpointRDD.randomSplit ([8, 1 , 1])
print ( "trainData:" + str (trainData.count ()) +
"validationData:" + str (validationData.count ()) +
"TestData:" + str (testData.count ()))
de retorno ( trainData, validationData, TestData, categoriesMap)

El tercer paso: el modelo de formación

def PredictData (sc, modelo, categoriesMap):
print ( "Los datos serán cargados ...")
rawDataWithHeader = sc.textFile (camino de + "datos / test.tsv")
encabezado = rawDataWithHeader.first ()
rawData = rawDataWithHeader.filter (lambda x : x = encabezado)
rdata = rawData.map (lambda x: x.replace ( "\" " ""))
líneas rData.map = (lambda x: x.split ( "\ t"))
print (" El número de datos "+ str (lines.count) ())
dataRDD = lines.map (lambda r: (r [0],
extract_features (r, categoriesMap, len (r))))
DescDict = {
0:" efímero ",
1: "siempre verde"
}
para los datos en dataRDD.take (10):
predictResult = model.predict (datos [1])
print ( "web"+ str (datos [0]) + "\ n" + \
"Predicción:" + str (predictResult) + \
"Inllustration:" + DescDict [predictResult] + "\ n")

Cuarto paso: evaluar el modelo (parámetros a ser ajustados numIterations, stepSize y miniBatchFraction)

def evaluateModel (modelo, validationData):
puntuación = model.predict (validationData.map (lambda p: p.features))
puntuación = score.map (Puntuación lambda: FLOAT () score)
Labels = validationData.map (lambda p: p .label)
Labels = Labels.map (Etiquetas lambda: flotador (Etiquetas))
scoreAndLabels = score.zip (etiquetas)
métricas = BinaryClassificationMetrics (scoreAndLabels)
AUC = metrics.areaUnderROC
retorno (AUC)

def trainEvaluateModel (trainData, validationData,
numIterations, tamaño de paso, miniBatchFraction):
tiempo () starttime =
Modelo = LogisticRegressionWithSGD.train (trainData, numIterations, tamaño de paso, miniBatchFraction)
AUC = evaluateModel (modelo, validationData)
duración = tiempo () - horaInicio
de impresión ( "numIterations =" + str (numIterations) + \
"stepSize =" + str (stepSize) + \
"miniBatchFraction =" + str (miniBatchFraction) + \
"Tiempo =" + str (duración) + \
"AUC =" + str (AUC))
de retorno (AUC, duración, numIterations, stepSize, miniBatchFraction, modelo)

def evalParameter (trainData, validationData, evalparm,
numIterationsList, stepSizeList, miniBatchFractionList):
métricas = [trainEvaluateModel (trainData, validationData,
numIterations, stepSize, miniBatchFraction)
para numIterations en numIterationsList
para stepSize en stepSizeList
para miniBatchFraction en miniBatchFractionList]
si evalparm == "numIterations ":
IndexList = numIterationsList [:]
elif evalparm ==" stepSize ":
IndexList = stepSizeList [:]
elif evalparm ==" miniBatchFraction ":
IndexList = miniBatchFractionList [:]
df = pd.DataFrame (métrica, índice = IndexList,
columnas = [ 'ABC', 'duración', 'numIterations', 'stepSize', 'miniBatchFraction', 'modelo'])
showChart (df, evalparm, 'ABC', 'duración', 0.5,0.7)

def showChart (df, evalparm, barData, Linedata, yMin, yMax):
ax = df [barData] .PLOT (tipo = 'bar', title = evalparm, figsize = (10,6), la leyenda = True, tamaño de fuente = 12 )
ax.set_xlabel (evalparm, tamaño de fuente = 12)
ax.set_ylim ([yMin, yMax])
ax.set_ylabel (barData, tamaño de fuente = 12)
ax2 = ax.twinx ()
ax2.plot (df [[Linedata]]. valores , estilo de línea = '-', marcador = 'o', anchura de línea = 2,0, color = 'r')
plt.show ()

def evalAllParameter (trainData, validationData,
numIterationsList, stepSizeList, miniBatchFractionList):
métricas = [trainEvaluateModel (trainData, validationData,
numIterations, tamaño de paso, miniBatchFraction)
para numIterations en numIterationsList
para stepSize en stepSizeList
para miniBatchFraction en miniBatchFractionList]
Smetrics = ordenados (métrica, = clave lambda k: k [0], revertir = true)
bestParameter = Smetrics [0]
de impresión ( "mejor parámetro: numIterations:" + str (bestParameter [2]) +
"stepSize:" + str (bestParameter [3]) +
"miniBatchFraction:" + str (bestParameter [4]) +
"AUC =" + str (bestParameter [0]))
volver bestParameter [5]

def parametersEval (de estar, validationData):
print ( "numIterations")
evalParameter (de vida, validationData "numIterations"
numIterationsList = [5, 15, 20, 60, 100],
stepSizeList = [10],
miniBatchFractionList = [1])
imprimir ( "stepSize")
evalParameter (de estar, validationData "stepSize"
numIterationsList = [100],
stepSizeList = [10, 50, 100, 200],
miniBatchFractionList = [1])
print ( "miniBatchFraction")
evalParameter (vivir, validationData "miniBatchFraction"
numIterationsList = [100],
stepSizeList = [100],
miniBatchFractionList = [0,5, 0,8, 1])

Paso cinco: ajustes relacionados con la chispa

def SetLogger (sc):
logger = sc._jvm.org.apache.log4j
logger.LogManager.getLogger ( "org"). setLevel (logger.Level.ERROR)
logger.LogManager.getLogger ( "akka"). setLevel (logger.Level.ERROR)
logger.LogManager.getRootLogger (). setLevel (logger.Level.ERROR)

def SetPath (sc):
Ruta mundial
si sc.master [0: 5] == "local":
Path = "file: Inicio / / jorlinlee / pythonsparkexample / PythonProject /"
otra cosa:
Path = "hdfs: // maestro: 9000 / user / jorlinlee /"

def CreateSparkContext ():
. conf = SparkConf () setMaster ( "local [*]") setAppName ( "LR").
sc = SparkContext (conf = conf)
print ( "master =" + sc.master)
SetLogger (sc)
SetPath (sc)
de retorno (sc)


sc.stop ()

Sexto paso: ejecutar el programa principal

si __name__ == "__main__":
print ( "RunLogisticRegressionWithSGDBinary")
sc = CreateSparkContext ()
de impresión ( "Datos preparar")
(trainData, validationData, TestData, categoriesMap) = PrepareData (sc)
trainData.persist (); validationData.persist (); testData.persist ()
de impresión ( "Evaluación")
(AUC, duración, numIterationsParm, stepSizeParm, miniBatchFractionParm, modelo) = trainEvaluateModel (trainData, validationData, 15, 10, 0,5)
si (len (sys.argv) == 2) y (sys.argv [1] == "- e"):
parametersEval (trainData, validationData)
elif (len (sys.argv) == 2) y (sys.argv [1] == "- a"):
print ( "mejores parámetros")
modelo = evalAllParameter (trainData, validationData,
[3, 5,

[0,5, 0,8, 1])
de impresión ( "test")
AUC = evaluateModel (modelo, TestData)
de impresión ( "Test AUC:" + str (AUC))
de impresión ( "predecir")
PredictData (sc, modelo, categoriesMap)

resultados:

Predecir
datos serán cargados ...
El número de data3171
Webhttp: //www.lynnskitchenadventures.com/2009/04/homemade-enchilada-sauce.html
Predicción: 0 Inllustration: efímera

Webhttp: //lolpics.se/18552-stun-grenade-ar
Predicción: 0 Inllustration: efímera

Webhttp: //www.xcelerationfitness.com/treadmills.html
Predicción: 0 Inllustration: efímera

Webhttp: //www.bloomberg.com/news/2012-02-06/syria-s-assad-deploys-tactics-of-father-to-crush-revolt-threatening-reign.html
Predicción: 0 Inllustration: efímera

Webhttp: //www.wired.com/gadgetlab/2011/12/stem-turns-lemons-and-limes-into-juicy-atomizers/
Predicción: 0 Inllustration: efímera

Webhttp: //www.latimes.com/health/boostershots/la-heb-fat-tax-denmark-20111013,0,2603132.story
Predicción: 0 Inllustration: efímera

Webhttp: //www.howlifeworks.com/a/a AG_ID = 1186 y cid = 7340ci?
Predicción: 0 Inllustration: efímera

Webhttp: //romancingthestoveblog.wordpress.com/2010/01/13/sweet-potato-ravioli-with-lemon-sage-brown-butter-sauce/
Predicción: 0 Inllustration: efímera

Webhttp: //www.funniez.net/Funny-Pictures/turn-men-down.html
Predicción: 0 Inllustration: efímera

Webhttp: //youfellasleepwatchingadvd.com/
Predicción: 0 Inllustration: efímera

Supongo que te gusta

Origin www.cnblogs.com/zhuozige/p/12626929.html
Recomendado
Clasificación